我正在使用 C# 为 IE 编写 BHO。我关心的代码是这样的:
public class BHO : IObjectWithSite, IOleCommandTarget
{
...
public BHO()
{
MessageBox.Show("Constructor called");
}
public int SetSite(object site)
{
MessageBox.Show("SetSite called!");
if( site != null )
{
_webBrowser = (WebBrowser) site;
_webBrowser.NavigateComplete2 += OnNavigateComplete2;
}
else
{
_webBrowser.NavigateComplete2 -= OnNavigateComplete2;
_webBrowser = null;
}
return 0;
}
private void OnNavigateComplete2(object pDisp, ref object URL)
{
MessageBox.Show("OnNavigateComplete2 called");
}
当 IE 在保护模式关闭的情况下运行时,一切正常。但是,如果打开保护模式,则会调用 NavigateCompleted2(),但永远不会调用 SetSite() 和构造函数 (!?!)。但是,如果我创建一个调用 BHO 类中的方法的菜单项,或者打开一个新选项卡,则所有内容都会正确调用。有谁知道为什么当我打开一个新的 IE 窗口时它不起作用?
完整的源列表可以在这里找到。