我正在使用 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 窗口时它不起作用?

完整的源列表可以找到 这里.

有帮助吗?

解决方案

MSDN上有人回答了我的问题:构造函数和方法仍在被调用,但由于某种原因,当我在保护模式下打开新窗口时,消息框不会显示,直到加载页面。由于不同的问题,未设置变量 - 构造函数正在实例化一个默默失败的对象。

我现在需要不同的帮助(非常相关) 问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top