BHO插件开发中的事件为什么那么乱呢

2018-08-21  本文已影响23人  zhjwang

最近在研究如何用c#开发BHO,话说之前开发了一个chrome的插件,相比来说BHO为何如此麻烦、今天总结一些关于事件的问题。
希望可以帮到有需要的朋友,愿每个程序员都不再加班

Csharpe开发BHO插件相关事件

c#开发bho中相关的触发事件。

1.为什么BHO中的事件触发这么乱呢?

BHO这个东西为什么这么乱呢,比如DocumentComplete,NavigateComplete2,DownloadComplete等,这些并不是我们想象的那样,一个页面加载完就是DownloadComplete,一个页面的加载,DownloadComplete会被加载多次。这是为啥呢?不知道。
最重要的是绑定事件后,当你刷新后,绑定的事件都不起作用了。

2.NavigateComplete2会被触发多次

因为我需要给dom绑定keyup事件,在测试的时候,发现NavigateComplete2会被触发多次,这个原因在于载入多个框架时,每个框架都会引发自己的NavigateComplete2和DocumentComplete事件,判断是否为主框架(即这个tab)。使用以下代码:

void ieInstance_NavigateComplete2(object pDisp, ref object URL)
{
    if (pDisp == ieInstance)
    {
        //Do something.
    }
}

其中ieInstance为public对象,而SetSite中将其指定:

public InternetExplorer ieInstance;
ieInstance = (InternetExplorer)site;

可以认为是该IE窗口(或选项卡)对应的对象。

3.鉴于以上两点,要怎么绑定事件呢

充分利用刷新后,失效的特性。

public HTMLElementEvents2_Event rootElementEvents = null;
  void ieInstance_NavigateComplete2(object pDisp, ref object URL)
        {
            if (pDisp == ieInstance)
            {
                  //绑定事件
            }
        }
if (rootElementEvents != document.documentElement as HTMLElementEvents2_Event)
{
    //重新绑定
}
void ieInstance_DownloadComplete()
上一篇下一篇

猜你喜欢

热点阅读