IE9 GetPropertyByName失败

时间:2013-08-05 06:36:21

标签: javascript c++ com internet-explorer-9 atl

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

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

1 个答案:

答案 0 :(得分:0)

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

returnValue property

  

备注

     

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

更多的是,该属性属于IHTMLDialog界面,因此您可以直接访问它,而无需依靠CComDispatchDriver的能力通过IDispatch / {{找到它的路径1}}命名属性访问。