diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index f9d246019e9..ee85eca871f 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -89,6 +89,7 @@ static const WCHAR selectstartW[] = {'s','e','l','e','c','t','s','t','a','r','t' static const WCHAR selectionchangeW[] = {'s','e','l','e','c','t','i','o','n','c','h','a','n','g','e',0}; static const WCHAR submitW[] = {'s','u','b','m','i','t',0}; static const WCHAR unloadW[] = {'u','n','l','o','a','d',0}; +static const WCHAR DOMContentLoadedW[] = {'D','O','M','C','o','n','t','e','n','t','L','o','a','d','e','d',0}; static const WCHAR EventW[] = {'E','v','e','n','t',0}; static const WCHAR UIEventW[] = {'U','I','E','v','e','n','t',0}; @@ -150,6 +151,8 @@ static const event_info_t event_info[] = { EVENT_FIXME | EVENT_BUBBLES}, {dblclickW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONDBLCLICK, EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE}, + {DOMContentLoadedW, EVENT_TYPE_EVENT, 0, + EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE}, {dragW, EVENT_TYPE_DRAG, DISPID_EVMETH_ONDRAG, EVENT_FIXME | EVENT_BUBBLES | EVENT_CANCELABLE}, {dragstartW, EVENT_TYPE_DRAG, DISPID_EVMETH_ONDRAGSTART, @@ -227,7 +230,7 @@ static eventid_t attr_to_eid(const WCHAR *str) return EVENTID_LAST; for(i=0; i < sizeof(event_info)/sizeof(event_info[0]); i++) { - if(!strcmpW(event_info[i].name, str+2)) + if(!strcmpW(event_info[i].name, str+2) && event_info[i].dispid) return i; } @@ -1298,7 +1301,7 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event) event_listener_t *listener, listeners_buf[8], *listeners = listeners_buf; unsigned listeners_cnt, listeners_size; ConnectionPointContainer *cp_container = NULL; - const event_target_vtbl_t *vtbl; + const event_target_vtbl_t *vtbl = NULL; VARIANT v; HRESULT hres; @@ -1446,7 +1449,8 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event) if(event->phase == DEP_CAPTURING_PHASE) return; - if((vtbl = dispex_get_vtbl(&event_target->dispex)) && vtbl->get_cp_container) + if(event_info[eid].dispid && (vtbl = dispex_get_vtbl(&event_target->dispex)) + && vtbl->get_cp_container) cp_container = vtbl->get_cp_container(&event_target->dispex); if(cp_container) { if(cp_container->cps) { diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h index eaf42eb8596..7dfc7ad29a9 100644 --- a/dlls/mshtml/htmlevent.h +++ b/dlls/mshtml/htmlevent.h @@ -26,6 +26,7 @@ typedef enum { EVENTID_CONTEXTMENU, EVENTID_DATAAVAILABLE, EVENTID_DBLCLICK, + EVENTID_DOMCONTENTLOADED, EVENTID_DRAG, EVENTID_DRAGSTART, EVENTID_ERROR,