diff --git a/dlls/mshtml/htmlframebase.c b/dlls/mshtml/htmlframebase.c index 980837924a0..e0c64f45b81 100644 --- a/dlls/mshtml/htmlframebase.c +++ b/dlls/mshtml/htmlframebase.c @@ -134,8 +134,21 @@ static HRESULT WINAPI HTMLFrameBase_put_src(IHTMLFrameBase *iface, BSTR v) TRACE("(%p)->(%s)\n", This, debugstr_w(v)); if(!This->content_window || !This->element.node.doc || !This->element.node.doc->basedoc.window) { - FIXME("detached element\n"); - return E_FAIL; + nsAString nsstr; + nsresult nsres; + + nsAString_InitDepend(&nsstr, v); + if(This->nsframe) + nsres = nsIDOMHTMLFrameElement_SetSrc(This->nsframe, &nsstr); + else + nsres = nsIDOMHTMLIFrameElement_SetSrc(This->nsiframe, &nsstr); + nsAString_Finish(&nsstr); + if(NS_FAILED(nsres)) { + ERR("SetSrc failed: %08x\n", nsres); + return E_FAIL; + } + + return S_OK; } return navigate_url(This->content_window, v, This->element.node.doc->basedoc.window->uri, BINDING_NAVIGATED); diff --git a/dlls/mshtml/tests/nav_test.html b/dlls/mshtml/tests/nav_test.html index 536b238b23d..11c4c0cae00 100644 --- a/dlls/mshtml/tests/nav_test.html +++ b/dlls/mshtml/tests/nav_test.html @@ -43,9 +43,24 @@ function window_navigate_test() { iframe.contentWindow.navigate("about:blank"); } +function detached_src_test() { + var iframe = document.createElement("iframe"); + var onload_called = false; + + iframe.onload = function() { + onload_called = true; + next_test(); + } + + iframe.src = "blank.html"; + document.body.appendChild(iframe); + ok(onload_called === false, "called onload too early?"); +} + var tests = [ nav_back_test, window_navigate_test, + detached_src_test, function() { external.reportSuccess(); } ];