使用的是CHhtmlView
在OnDocumentComplete中,对一个正确的 IHTMLElement 对像可以使用 insertAdjacentHTML 操作。可是程序后期,比如加一个按钮。点一下更新提定的IHTMLElement节点 。其代码继续引用IHTMLElement 对像,但是使用 insertAdjacentHTML 却抛出了异常。下面是得到 IHTMLElement 对像,并更新的方法LPDISPATCH lpDisp = GetHtmlDocument(); CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> spDoc(lpDisp);
CComPtr<IHTMLElement> spBodyElem;
HRESULT hr = spDoc->get_body(&spBodyElem);
if ( FAILED(hr) || !spBodyElem )
return; CComQIPtr<IHTMLDocument3, &IID_IHTMLDocument3> spDoc3(lpDisp);
if ( !spDoc3 )
return; CString strID( id ); //指定id
BSTR bID = strID.AllocSysString();

//使用id得到位置
CComQIPtr<IHTMLElement> spElemDetail;
hr = spDoc3->getElementById(bID, &spElemDetail);
SysFreeString( bID );

if ( FAILED(hr) || !spElemDetail)
return; BSTR BTxt;
spElemDetail->get_innerHTML(&BTxt); //在OnDocumentComplete 与 程序后期使用这语句都可以得到正确的值 BTxt = strTip.AllocSysString();
hr = spElemDetail->insertAdjacentHTML( L"beforeEnd" , BTxt ); //更新节点 ,此语句只有在OnDocumentComplete中才可以正常执行
SysFreeString( BTxt );

解决方案 »

  1.   


    //Res/*You cannot insert text while the document is loading. Wait for the onload event before attempting to call this method. */这是msdn上说的,加载的时候不能用这个方法。
      

  2.   

    在加载完成后( OnDocumentComplete )使用 insertAdjacentHTML 方法更新节点可以成功。程序中的按钮也一定是在页面完成加载后,才可以使用的。但是,这时使用同样的方法insertAdjacentHTML 却抛出异常。
      

  3.   

    问题页面加载完之后.可能还有某些动态的ajax语句在执行..这个时候可以用这个方法吗?
      

  4.   

    页面加载完之后,没有动态的ajax语句在执行了。问题是使用下面的语句可以正常执行
    spElemDetail->get_innerHTML(&BTxt); //在OnDocumentComplete中 与 页面加载完成后主程序调用这条语句都可以得到正确的值但是使用 insertAdjacentHTML ,insertAdjacentText ,put_text 等改变 element 值的语句都无法使用了。只能在OnDocumentComplete 函数中使用。实在不懂怎么解决。
      

  5.   

    不是所有的DOM元素都可以用这些方法,比如DIV元素可以使用上面所有的方法来修改内容,但TABLE就不行。这只是一个示例,具体哪些元素能用哪些方法,在MSDN上有详细的描述。