小编Joã*_*sto的帖子

如果网站的元标记内容="IE = 9",则BHO IE 9捕获OnScroll事件

我最近注意到,如果我在IE9中显示页面并且页面包含标记,我无法捕获BHO中"顶部"窗口的OnSroll事件: <meta http-equiv="X-UA-Compatible" content="IE=9">.

我通过在顶层文档的IHTMLWindow2中沉没DIID_HTMLWindowEvents2的DISPID_HTMLWINDOWEVENTS2_ONSCROLL来捕获滚动,并且它在所有情况下都能正常工作,除非页面包含该元标记.

我的接收器类定义为:

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()
Run Code Online (Sandbox Code Playgroud)

而我正在这样下沉.

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;                                                           
  }

}
Run Code Online (Sandbox Code Playgroud)

其中_spDocument是a CComPtr<IHTMLDocument2>和_spWindow aCComPtr<IHTMLWindow2>

任何想法?此外,它似乎存在IE9 SDK标头和msdn文档中的不匹配.例如在IE …

c++ bho onscroll internet-explorer-9

12
推荐指数
0
解决办法
523
查看次数

如何捕获templateUrl加载错误

假设组件的模板请求无法传递(状态代码400等),有没有办法捕获错误以便采取行动(重定向等...)

谢谢.

angular2-template angular

8
推荐指数
1
解决办法
635
查看次数