VC获得网页中JS的WINDOW对象再传递给其他浏览器对象的JS对象,关闭浏览器以后出错,那位大哥解决一下。STDMETHODIMP CMToolBar::GetWindowObject(BSTR security_code,VARIANT* pvarResult)
{
HRESULT hr=S_OK;
IHTMLDocument2 * m_spdoc2;
hr=m_spFrameWB->get_Document((IDispatch **)&m_spdoc2);
if(SUCCEEDED(hr)){
CComQIPtr<IHTMLWindow2> m_spwnd2;
hr=m_spdoc2->get_parentWindow(&m_spwnd2);
if(SUCCEEDED(hr)){
pvarResult->vt=VT_DISPATCH;
pvarResult->pdispVal=m_spwnd2;
}
}
return hr;
}m_spFrameWB 浏览器对象。
{
HRESULT hr=S_OK;
IHTMLDocument2 * m_spdoc2;
hr=m_spFrameWB->get_Document((IDispatch **)&m_spdoc2);
if(SUCCEEDED(hr)){
CComQIPtr<IHTMLWindow2> m_spwnd2;
hr=m_spdoc2->get_parentWindow(&m_spwnd2);
if(SUCCEEDED(hr)){
pvarResult->vt=VT_DISPATCH;
pvarResult->pdispVal=m_spwnd2;
}
}
return hr;
}m_spFrameWB 浏览器对象。
CComPtr<IDispatch> spDispDoc;
hr = m_spFrameWB->get_Document(&spDispDoc);
CComQIPtr<IHTMLDocument2> m_spdoc2 = spDispDoc;
{
HRESULT hr=S_OK;
if(CheckSecurityCode(security_code)){
CComPtr<IDispatch> m_spdip;
hr=m_spFrameWB->get_Document(&m_spdip);
if(SUCCEEDED(hr)){
CComQIPtr<IHTMLDocument2> m_spdoc2 = m_spdip;
hr=m_spdoc2->get_Script(&m_spdip);
if(SUCCEEDED(hr)){
CComBSTR bstrMember("window");
DISPID dispid = NULL;
hr = m_spdip->GetIDsOfNames(IID_NULL, &bstrMember,1,LOCALE_SYSTEM_DEFAULT, &dispid);
if(SUCCEEDED(hr)){
DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
EXCEPINFO aexception;
hr = m_spdip->Invoke(dispid,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_PROPERTYGET,&dispparamsNoArgs,pvarResult,&aexception, 0);
if(SUCCEEDED(hr)){
MessageBoxA("","",MB_OK);
}
}
}
}
}
return hr;
}这样还是出现同样的问题,感觉有点像, window 对象被目标的 JS 释放了,当浏览器释放 window的时候 出错了。