diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 57a9cfd7a32..c5bcdb9d40f 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -294,43 +294,31 @@ static HRESULT WINAPI HTMLDocument_get_all(IHTMLDocument2 *iface, IHTMLElementCo
static HRESULT WINAPI HTMLDocument_get_body(IHTMLDocument2 *iface, IHTMLElement **p)
{
HTMLDocument *This = HTMLDOC_THIS(iface);
- nsIDOMDocument *nsdoc;
- nsIDOMHTMLDocument *nshtmldoc;
nsIDOMHTMLElement *nsbody = NULL;
HTMLDOMNode *node;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
- *p = NULL;
+ if(!This->nsdoc) {
+ WARN("NULL nsdoc\n");
+ return E_UNEXPECTED;
+ }
- if(!This->nscontainer)
- return S_OK;
-
- nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
+ nsres = nsIDOMHTMLDocument_GetBody(This->nsdoc, &nsbody);
if(NS_FAILED(nsres)) {
- ERR("GetDocument failed: %08x\n", nsres);
- return S_OK;
- }
-
- if(NS_FAILED(nsres) || !nsdoc)
- return S_OK;
-
- nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc);
- nsIDOMDocument_Release(nsdoc);
-
- nsres = nsIDOMHTMLDocument_GetBody(nshtmldoc, &nsbody);
- nsIDOMHTMLDocument_Release(nshtmldoc);
-
- if(NS_FAILED(nsres) || !nsbody) {
TRACE("Could not get body: %08x\n", nsres);
- return S_OK;
+ return E_UNEXPECTED;
}
- node = get_node(This, (nsIDOMNode*)nsbody, TRUE);
- nsIDOMHTMLElement_Release(nsbody);
+ if(nsbody) {
+ node = get_node(This, (nsIDOMNode*)nsbody, TRUE);
+ nsIDOMHTMLElement_Release(nsbody);
- IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p);
+ IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p);
+ }else {
+ *p = NULL;
+ }
TRACE("*p = %p\n", *p);
return S_OK;