【发布时间】:2013-08-05 18:59:29
【问题描述】:
您好,我们在不兼容模式下使用 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 值。
有什么想法吗?这是一个已知问题吗?如果有,有什么修复/解决方法吗?
【问题讨论】:
-
我们希望从 C++ 端获取 window.top.returnValue 并访问 JS 变量。如果有帮助,我们正在使用 MSVC 6 ATL。
-
检查this 以获取
IDispatchEx::GetDispID在window对象上的示例。
标签: javascript c++ com internet-explorer-9 atl