gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:00 25 4
gpt4 key购买 nike

我正在使用以下示例创建 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com