c# - IE BHO 为每个选项卡加载两次

标签 c# c++ internet-explorer bho

我正在使用以下示例创建 IE BHO:http://code.msdn.microsoft.com/CSBrowserHelperObject-c5f3d2f6

我遇到的问题是,对于每个选项卡,BHO 都加载了两次。我在 BHO 构造函数中插入了以下核心:

        Trace.WriteLine("BHO.ctor");
        Trace.WriteLine("Thread: " + Thread.CurrentThread.ManagedThreadId + " of process: " + Process.GetCurrentProcess().Id);

在析构函数中:

        Trace.WriteLine("BHO.destructor");
        Trace.WriteLine("Thread: " + Thread.CurrentThread.ManagedThreadId + " of process: " + Process.GetCurrentProcess().Id);

然后在 Setsite 中:

        Trace.WriteLine("Bho.SetSite: " + site);
        Trace.WriteLine("Thread: " + Thread.CurrentThread.ManagedThreadId + " of process: " + Process.GetCurrentProcess().Id);

当我在调试输出中启动 IE 时,我看到:

[3376] BHO.ctor 
[3376] Thread: 1 of process: 3376 
[3376] Bho.SetSite: System.__ComObject 
[3376] Thread: 1 of process: 3376 
[3376] BHO.ctor 
[3376] Thread: 3 of process: 3376 
[3376] Bho.SetSite: System.__ComObject 
[3376] Thread: 3 of process: 3376

只有当我关闭它时:

[3376] BHO.destructor 
[3376] Thread: 2 of process: 3376 
[3376] BHO.destructor 
[3376] Thread: 2 of process: 3376 

因此,BHO 被加载了两次,并且 BHO 的两个实例同时存在。为什么会发生这种情况?

我在我的 BHO 订阅来自第三方集会的事件时发现了这个问题,并且我遇到了一些奇怪的行为(因为该事件有超过 1 个订阅者)。一开始我以为是第三方库导致的,但现在我从 BHO 中删除了所有额外的代码,所以它基本上什么都不做,但仍然被加载了两次。

此外,如果在 SetSite 中我添加 OnDocumentComplete 处理程序,然后在此处理程序中我使用跟踪将 URL 写入调试控制台,我看到第一个线程 URL 将是我页面的实际 URL(例如 www.google.com),第二个线程它将是“关于:空白”。另外,如果我再打开一个选项卡并在那里做一些事情,然后切换到第一个选项卡,我会看到又创建了一个 BHO 实例(URL:about:blank)

最佳答案

这可能是IE的完整性级别管理。

我正在尝试自己解决这个问题。

我目前正在考虑:

http://blogs.msdn.com/b/ieinternals/archive/2011/08/03/internet-explorer-automation-protected-mode-lcie-default-integrity-level-medium.aspx

第二个似乎在一秒钟左右后消失了。

关于c# - IE BHO 为每个选项卡加载两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896804/

相关文章:

具有 freeglut 连续重新计算图形闪烁的 C++ OpenGL

html - 如果我们输入任何内容,IE 的输入框中没有任何显示?

php - iframe 中的parent.location.reload 不工作 IE

c++ - 用不同的模板参数包装模板类

css - IE 问题 z-index css

c# - 在 Windows CE 的托管 C# 代码中加载 native DLL 作为调试模块

c# - EF Core 2.0 - 添加时出现 System.NotSupportedException

c# - 数组中的对象没有被垃圾收集

c# - 串行端口与 MSComm

c++ - 忽略 `Wunused-parameter`作为第三方标题