JavaScript — ошибка IE9 GetPropertyByName

Привет Мы используем 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, и мы получаем 0 для GetLastError.

Есть идеи? Это известная проблема, и если да, то какие исправления / обходные пути?

0

Решение

То, что вы делаете здесь, это запрос свойства с именем returnValue из COM-объекта, для которого у вас есть IHTMLWindow2 указатель интерфейса Это не должно сработать, потому что вы предполагаете, что свойство существует, а в документации сказано иначе:

свойство returnValue:

замечания

Это свойство применяется только для окон, созданных с помощью
IHTMLWindow2::showModalDialog метод.

Более того, собственность принадлежит IHTMLDialog интерфейс, так что вы могли бы получить доступ к нему напрямую, не полагаясь на CComDispatchDriverСпособность найти путь к нему через IDispatch/IDispatchExдоступ к именованным свойствам

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]