Недавно я заметил, что я не могу захватить события OnSroll в "верхнем" окне в моем BHO, если я показываю страницу в IE9, а страница contes тега: <meta http-equiv="X-UA-Compatible" content="IE=9">.
Я захватываю прокрутку, погружая DISPID_HTMLWINDOWEVENTS2_ONSCROLL из DIID_HTMLWindowEvents2 в IHTMLWindow2 в верхнем документе, и он отлично работает во всех случаях, за исключением случаев, если страница содержит этот метатег.
Мой класс раковины определяется как:
class CIEPage : public IDispEventImpl<1, CIEPage, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 4, 0>,
public IDispEventImpl<2, CIEPage, &DIID_HTMLWindowEvents2, &LIBID_MSHTML, 4, 0>
// SinkMap
BEGIN_SINK_MAP(CIEPage)
SINK_ENTRY_EX(1, DIID_HTMLDocumentEvents2, DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER, OnMouseOver)
SINK_ENTRY_EX(2, DIID_HTMLWindowEvents2, DISPID_HTMLWINDOWEVENTS2_ONSCROLL, OnScroll)
END_SINK_MAP()
И я тону, как это.
hr = IDispEventImpl<1, CIEPage, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 4, 0>::DispEventAdvise(_spDocument);
if(SUCCEEDED(hr))
_bAdvised[ListenerEventMouseOver] = true;
if(IsTopPage())
{
hr = _spDocument->get_parentWindow(reinterpret_cast<IHTMLWindow2 **>(&_spWindow));
if (SUCCEEDED(hr) && _spWindow)
{
hr = IDispEventImpl<2, CIEPage, &DIID_HTMLWindowEvents2, &LIBID_MSHTML, 4, 0>::DispEventAdvise(_spWindow);
if(SUCCEEDED(hr))
_bAdvised[ListenerEventScroll] = true;
}
}
где _spDocument - это CComPtr<IHTMLDocument2>
и _spWindow a CComPtr<IHTMLWindow2>
Любые идеи? Также, похоже, существует несоответствие в заголовках IE9 SDK и документации msdn. Например, новые события документа IE 9 в документах определяют многие события, которые недоступны в SDK. Это определение в файле mshtml.idl
[
hidden,
uuid(30510737-98b5-11cf-bb82-00aa00bdce0b)
]
dispinterface HTMLDocumentEvents4
{
properties:
methods:
[id(DISPID_HTMLDOCUMENTEVENTS4_ONMSTHUMBNAILCLICK)] void onmsthumbnailclick([in] IHTMLEventObj* pEvtObj);
[id(DISPID_HTMLDOCUMENTEVENTS4_ONMSSITEMODEJUMPLISTITEMREMOVED)] void onmssitemodejumplistitemremoved([in] IHTMLEventObj* pEvtObj);
};
Так как теперь в документе есть msdn OnScrollEvent, возможно, это событие, которое мне нужно потопить, если браузер - это версия 9, а страница - IE = 9... но SDK не содержат эту информацию...
Любая помощь приветствуется. Спасибо.