Bonjour Nous utilisons IE9 en mode non-compatibilité.IE9 GetPropertyByName échouant
Nous faisons quelque chose comme ça pour lire les valeurs des variables JS du côté du navigateur:
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();
Nous utilisons ancienne version d'ATL.
Maintenant, cette routine échoue toujours lorsqu'elle est exécutée en mode non-compatibilité IE9. "returnValue" est Null et nous obtenons la valeur 0 pour GetLastError.
Des idées? Est-ce un problème connu et si oui des correctifs/solutions de contournement?
Nous prévoyons obtenir window.top.returnValue et accéder aux variables JS du côté C++. Nous utilisons MSVC 6 ATL si cela aide. – Pranab
Cochez [this] (http://stackoverflow.com/questions/18342200/how-do-i-call-eval-in-ie-from-c/18349546#18349546) pour un exemple de 'IDispatchEx :: GetDispID' sur l'objet 'window'. – Noseratio