diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c index d636834a3ec..b0efb7c4b8e 100644 --- a/dlls/mshtml/htmldoc3.c +++ b/dlls/mshtml/htmldoc3.c @@ -421,37 +421,36 @@ static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v IHTMLElement **pel) { HTMLDocument *This = HTMLDOC3_THIS(iface); - nsIDOMDocument *nsdoc = NULL; - nsIDOMElement *nselem = NULL; + nsIDOMElement *nselem; HTMLDOMNode *node; nsAString id_str; nsresult nsres; TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pel); - *pel = NULL; - - if(!This->nscontainer) - return S_OK; - - nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc); - if(NS_FAILED(nsres) || !nsdoc) - return S_OK; - - nsAString_Init(&id_str, v); - nsIDOMDocument_GetElementById(nsdoc, &id_str, &nselem); - nsIDOMDocument_Release(nsdoc); - nsAString_Finish(&id_str); - - if(!nselem) { - *pel = NULL; - return S_OK; + if(!This->nsdoc) { + WARN("NULL nsdoc\n"); + return E_UNEXPECTED; } - node = get_node(This, (nsIDOMNode*)nselem, TRUE); - nsIDOMElement_Release(nselem); + nsAString_Init(&id_str, v); + nsres = nsIDOMHTMLDocument_GetElementById(This->nsdoc, &id_str, &nselem); + nsAString_Finish(&id_str); + if(FAILED(nsres)) { + ERR("GetElementById failed: %08x\n", nsres); + return E_FAIL; + } - return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)pel); + if(nselem) { + node = get_node(This, (nsIDOMNode*)nselem, TRUE); + nsIDOMElement_Release(nselem); + + IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)pel); + }else { + *pel = NULL; + } + + return S_OK; }