0

嗨,我们在非兼容模式下使用 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 值。

有任何想法吗?这是一个已知问题吗?如果有,有什么修复/解决方法吗?

4

1 回答 1

0

你在这里做的是查询returnValue从 COM 对象命名的属性,你有IHTMLWindow2接口指针。这不必解决,因为您假设该属性存在,并且文档另有说明:

返回值属性

评论

此属性仅适用使用该 IHTMLWindow2::showModalDialog方法创建的窗口。

更重要的是,该属性属于IHTMLDialog接口,因此您可能可以直接访问它,而无需依赖's 通过/命名属性访问CComDispatchDriver找到它的路径的能力。IDispatchIDispatchEx

于 2013-08-05T07:58:08.850 回答