diff --git a/dlls/mshtml/script.c b/dlls/mshtml/script.c index 3503e6971a2..ab9be3b4419 100644 --- a/dlls/mshtml/script.c +++ b/dlls/mshtml/script.c @@ -997,12 +997,30 @@ static const BSCallbackVtbl ScriptBSCVtbl = { }; -static HRESULT bind_script(HTMLInnerWindow *window, IUri *uri, HTMLScriptElement *script_elem) +static HRESULT load_script(HTMLScriptElement *script_elem, const WCHAR *src) { + HTMLInnerWindow *window; ScriptBSC *bsc; IMoniker *mon; + IUri *uri; HRESULT hres; + static const WCHAR wine_schemaW[] = {'w','i','n','e',':'}; + + if(strlenW(src) > sizeof(wine_schemaW)/sizeof(WCHAR) && !memcmp(src, wine_schemaW, sizeof(wine_schemaW))) + src += sizeof(wine_schemaW)/sizeof(WCHAR); + + TRACE("(%p %s)\n", script_elem, debugstr_w(src)); + + if(!script_elem->element.node.doc || !(window = script_elem->element.node.doc->window)) { + ERR("no window\n"); + return E_UNEXPECTED; + } + + hres = create_uri(src, 0, &uri); + if(FAILED(hres)) + return hres; + hres = CreateURLMonikerEx2(NULL, uri, &mon, URL_MK_UNIFORM); if(FAILED(hres)) return hres; @@ -1029,24 +1047,6 @@ static HRESULT bind_script(HTMLInnerWindow *window, IUri *uri, HTMLScriptElement return hres; } -static void parse_extern_script(ScriptHost *script_host, HTMLScriptElement *script_elem, LPCWSTR src) -{ - IUri *uri; - HRESULT hres; - - static const WCHAR wine_schemaW[] = {'w','i','n','e',':'}; - - if(strlenW(src) > sizeof(wine_schemaW)/sizeof(WCHAR) && !memcmp(src, wine_schemaW, sizeof(wine_schemaW))) - src += sizeof(wine_schemaW)/sizeof(WCHAR); - - hres = create_uri(src, 0, &uri); - if(FAILED(hres)) - return; - - hres = bind_script(script_host->window, uri, script_elem); - IUri_Release(uri); -} - static void parse_inline_script(ScriptHost *script_host, HTMLScriptElement *script_elem) { const PRUnichar *text; @@ -1095,7 +1095,7 @@ static void parse_script_elem(ScriptHost *script_host, HTMLScriptElement *script if(NS_FAILED(nsres)) { ERR("GetSrc failed: %08x\n", nsres); }else if(*src) { - parse_extern_script(script_host, script_elem, src); + load_script(script_elem, src); }else { parse_inline_script(script_host, script_elem); }