{
const WCHAR text_javascriptW[] =
{'t','e','x','t','/','j','a','v','a','s','c','r','i','p','t',0};
+ const WCHAR text_jscriptW[] =
+ {'t','e','x','t','/','j','s','c','r','i','p','t',0};
const WCHAR text_vbscriptW[] =
{'t','e','x','t','/','v','b','s','c','r','i','p','t',0};
/* FIXME: Handle more types */
- if(!strcmpiW(type, text_javascriptW)) {
+ if(!strcmpiW(type, text_javascriptW) || !strcmpiW(type, text_jscriptW)) {
*guid = CLSID_JScript;
}else if(!strcmpiW(type, text_vbscriptW)) {
*guid = CLSID_VBScript;
return disp;
}
-static HTMLElement *find_event_target(HTMLDocumentNode *doc, HTMLScriptElement *script_elem)
+static event_target_t **find_event_target(HTMLDocumentNode *doc, HTMLScriptElement *script_elem, HTMLDOMNode **ret_target_node)
{
+ HTMLDOMNode *target_node = NULL;
+ event_target_t **target = NULL;
const PRUnichar *target_id;
nsAString target_id_str;
- HTMLElement *elem;
nsresult nsres;
HRESULT hres;
}
nsAString_GetData(&target_id_str, &target_id);
- if(!*target_id || !strcmpW(target_id, documentW) || !strcmpW(target_id, windowW)) {
- FIXME("for %s not supported\n", debugstr_w(target_id));
- elem = NULL;
+ if(!*target_id) {
+ FIXME("Empty for attribute\n");
+ }else if(!strcmpW(target_id, documentW)) {
+ target = &doc->node.event_target;
+ target_node = &doc->node;
+ IHTMLDOMNode_AddRef(&target_node->IHTMLDOMNode_iface);
+ }else if(!strcmpW(target_id, windowW)) {
+ target = &doc->body_event_target;
}else {
- hres = get_doc_elem_by_id(doc, target_id, &elem);
- if(FAILED(hres))
- elem = NULL;
+ HTMLElement *target_elem;
+
+ hres = get_doc_elem_by_id(doc, target_id, &target_elem);
+ if(SUCCEEDED(hres) && target_elem) {
+ target_node = &target_elem->node;
+ target = &target_elem->node.event_target;
+ }
}
nsAString_Finish(&target_id_str);
- return elem;
+ *ret_target_node = target_node;
+ return target;
}
static BOOL parse_event_str(WCHAR *event, const WCHAR **args)
HTMLPluginContainer *plugin_container;
nsIDOMHTMLScriptElement *nsscript;
HTMLScriptElement *script_elem;
- HTMLElement *event_target;
+ event_target_t **event_target;
nsIDOMNodeList *node_list;
+ HTMLDOMNode *target_node;
nsIDOMNode *script_node;
nsAString selector_str;
IDispatch *event_disp;
event_disp = parse_event_elem(doc, script_elem, &event);
if(event_disp) {
- event_target = find_event_target(doc, script_elem);
+ event_target = find_event_target(doc, script_elem, &target_node);
if(event_target) {
- hres = IHTMLElement_QueryInterface(&event_target->IHTMLElement_iface, &IID_HTMLPluginContainer,
- (void**)&plugin_container);
+ if(target_node)
+ hres = IHTMLDOMNode_QueryInterface(&target_node->IHTMLDOMNode_iface, &IID_HTMLPluginContainer,
+ (void**)&plugin_container);
+ else
+ hres = E_NOINTERFACE;
if(SUCCEEDED(hres))
bind_activex_event(doc, plugin_container, event, event_disp);
else
- bind_elem_event(doc, event_target, event, event_disp);
+ bind_node_event(doc, event_target, target_node, event, event_disp);
- IHTMLElement_Release(&event_target->IHTMLElement_iface);
+ if(target_node)
+ IHTMLDOMNode_Release(&target_node->IHTMLDOMNode_iface);
}
heap_free(event);