我正在使用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窗口时,有谁知道为什么它不起作用?
可以找到完整的源列表here。
答案 0 :(得分:0)
MSDN上的某个人回答了我的问题:仍在调用构造函数和方法,但由于某种原因,当我在保护模式下打开一个新窗口时,MessageBoxes不会显示,直到加载页面为止。由于不同的问题,变量没有被设置 - 构造函数正在实例化一个静默失败的对象。
我现在需要帮助解决另一个(very much related)问题。