c# - IE 的区域海拔保护干扰 BHO 的功能
问题描述
我正在为用 C# 编写的 Internet Explorer 开发浏览器帮助程序对象 (BHO)。我使用该BeforeNavigate
事件来获取调用的 URL 并将其保存到局部变量中。对于每个选项卡,都会生成一个新的 BHO 实例。这意味着每个选项卡都有自己的 BHO,而 BHO 又拥有自己的局部变量。在被新的 URL 覆盖之前,我通过显示带有先前调用的 URL(局部变量的值)的 MessageBox 来检查这一点。
string myUrl = "";
void BeforeNavigate( string URL, ... )
{
System.Windows.Forms.MessageBox.Show( myUrl );
myUrl = URL.ToString();
}
但在某些情况下,尽管之前调用了 URL,但局部变量为空。我调查了 IE 设置,发现这种行为是由 IE 的区域提升保护引起的。区域local intranet
和保护模式被禁用,而区域和trusted sites
保护模式被启用。internet
restricted sites
例如,当intranet.com
被调用,然后internet.com
在同一个选项卡中,我希望 MessageBoxintranet.com
在internet.com
被调用时显示。但是会显示一个空字符串。我猜想调用会internet.com
激活此选项卡的保护模式,从而生成 BHO 的新实例。MessageBox 现在将显示新 BHO 实例的变量值。旧 BHO 的变量值丢失。
如果为区域启用了保护模式local intranet
并且trusted sites
BHO 行为正确。我猜出于兼容性原因,在此区域中禁用了保护模式。内网中可能存在不支持保护模式的网站。因此,我正在寻找一种解决方案,该解决方案可以在此区域禁用保护模式的情况下工作。
由于 IE 管理 BHO 的加载,我怀疑这个问题是否可以从 BHO 内部解决。
有没有人对这个话题有更深入的了解来证实我的猜测?
local intranet
是否可以在为区域和禁用保护模式的情况下保持变量的值trusted sites
?
任何帮助将不胜感激,谢谢!
解决方案
我找到了以下链接:http: //jimevansmusic.blogspot.com/2012/08/youre-doing-it-wrong-protected-mode-and.html
有说:
当您通过例如从内部 Intranet 网站导航到 Internet 上的网站进入或退出保护模式时,IE 必须创建一个新进程,因为它无法更改现有进程的强制完整性控制级别。此外,在 IE 7 之后的版本中,跨越保护模式边界并不总是很明显,因为 IE 试图通过将新进程的浏览器窗口与已经打开的浏览器窗口无缝合并来呈现更好的用户体验。这种隐蔽的进程切换还意味着在保护模式边界交叉之前指向 IE 的 COM 对象的任何引用都将指向在边界交叉之后 IE 不再使用的对象。
基于此,我的猜测似乎是正确的。作为 IE 的 COM 对象的 BHO 不再使用,因此失去了它的价值。剩下的唯一解决方案是为所有区域启用或禁用保护模式。
推荐阅读
- python - 使用 python 消费流视频
- java - 如何将私钥从服务器传送到客户端安全?[爪哇]
- android - 我想在 Kotlin 中自定义新按钮时遇到问题
- python - 如何使用 Python 3 从序列中找到第一个匹配的列表值
- php - 在不考虑 DST 的情况下获取时区缩写
- python - 提高图像分类模型的性能
- r - 使用 pivot_longer 将数据转换为具有重复列名的 long
- javascript - 如何在基类方法中调用子类方法?
- python - 如何从 tkinter 中的函数访问 Entry 小部件内的文本?
- bash - 如何使用 export PS1="\W \$" 修复自定义终端提示;清除; 变成 \W $