您好我们在非兼容模式下使用IE9。
我们正在做这样的事情来从浏览器端读取JS变量值:
ComPtr<IDispatch> disp;
m_spBrowser->get_Document(&disp);
CComQIPtr<IHTMLDocument2> htmlDoc = disp;
if( !htmlDoc ) return ZString();
CComPtr<IHTMLWindow2> spWindow;
htmlDoc->get_parentWindow(&spWindow);
CComVariant varRes;
CComDispatchDriver dispWindow = spWindow;
if( dispWindow ) {
HRESULT hr = dispWindow.GetPropertyByName(L"returnValue", &varRes);
if( SUCCEEDED(hr) && SUCCEEDED(varRes.ChangeType(VT_BSTR)) )
return CString(varRes.bstrVal);
}
return CString();
我们正在使用旧版本的ATL。
现在,在IE9非兼容模式下运行时,此例程始终失败。 “returnValue”为Null,我们为GetLastError获取0值。
有什么想法吗?这是一个已知问题,如果有任何修复/解决方法?
答案 0 :(得分:0)
你在这里做的是从COM对象查询名为returnValue
的属性,你有IHTMLWindow2
接口指针。这不必解决,因为您认为该属性存在,而文档则另有说明:
备注
此属性仅将 应用于使用该窗口创建的窗口
IHTMLWindow2::showModalDialog
方法。
更多的是,该属性属于IHTMLDialog
界面,因此您可以直接访问它,而无需依靠CComDispatchDriver
的能力通过IDispatch
/ {{找到它的路径1}}命名属性访问。