2

我正在使用 Borland Delphi 6.0 创建的浏览器帮助程序对象 (BHO)(为了完整起见,这是 2001 年的 Delphi 版本,它编译了我注册用于 Internet Explorer 的本机 32 位 DLL )。

BHO 的目的是向特定网页元素添加原始内容不可用的额外信息。因此,作为我试图实现的那种事情的一个例子,这可能意味着向图像添加一个工具提示,显示有关图片显示内容和创建时间的详细信息 - 我为此目的使用QTip ,一个 Javascript基于JQuery的弹出窗口。

我使用 BHO 的 Delphi 组件在 DOM 中搜索我有兴趣修改的页面元素,将这些元素包装在具有唯一类属性的 span 中,然后将几个脚本注入 DOM HEAD(脚本被编译到BHO 作为资源,在页面加载时检索,然后将其完整写入文档 - 为每个 IHTMLScriptElement 创建一个新的 IHTMLScriptElement,然后将检索到的脚本分配给脚本元素的 text 属性)。

这些脚本处理寻找我们的那些跨度,然后创建当用户在任何目标页面元素上“鼠标悬停”时将出现的 QTip 对象(有 3 个脚本,一个 JQuery 副本,一个 QTip 副本,以及我的寻找跨度元素的脚本)。

这在我的工作环境中运行良好:带有 Internet Explorer 8.0 的 Windows XP SP3

当我使用更新的 Internet Explorer 副本(9 或更高版本)在更新的 Windows 版本上注册 BHO 时,问题就开始了。 在这里,当我打开一些用于测试的网页时,页面底部会出现一条消息,说明:

“仅显示安全内容”

并提示我允许或禁止被阻止的内容。被阻止的内容似乎是我从 BHO 注入页面的脚本。

所以,问题 1 是:有什么方法可以阻止 IE 为我注入的脚本显示此消息而不更改客户端计算机?

另外,当我第一次注册我的 BHO 并启动 IE 时,我在屏幕底部收到一条消息:

“来自未知发布者的 '' 附加组件已准备好使用”

所以问题2是,呃,双重的。首先,有什么方法可以在注册 BHO 时以编程方式将其标记为“可供使用”,以防止出现此消息?或者,或者,删除听起来险恶的“未知出版商”标签的过程是什么 - 我假设这将涉及某种昂贵的数字签名过程,但我无法找到任何有关它的信息。

问题 3是上一个问题的后续,如果我在 IE 告诉我“加载项...已准备好使用”时单击“启用”,则在我重新启动 Web 浏览器之前它不起作用。我不知道是否有任何方法可以解决这个问题并让它立即开始运行,或者提醒用户必须重新启动浏览器才能做任何有用的事情 - 建议?

提前感谢您的任何建议和您的时间

附录,SO抱怨我需要1500或更高的声誉才能添加一些我认为与我的问题最相关的标签(例如“浏览器帮助对象”),因此很抱歉在他们的位置选择不太有意义的标签。

4

1 回答 1

1

不,您不能“预先批准”您的扩展程序以避免“准备好使用”通知。如果您尝试这样做,Microsoft 将考虑您的扩展恶意软件,并可以完全阻止它在 IE 中加载,将分发它的站点视为恶意等。您根本不应该尝试它。

您必须重新启动浏览器才能使用该扩展程序;在您重新启动浏览器(或启动一个以新选项卡进程结束的新选项卡)之前,无法使其正常工作。

您的代码的问题在于它正在注入不使用安全 URL 的内容(例如,将 HTTP URL 注入 HTTPS 页面)。你注入的是什么类型的 URL?您使用的是 RES:// 协议还是其他协议?如果您使用扩展实现的自定义 URL 协议,则需要将该协议配置为被视为“安全”协议(请参阅QueryInfo方法中的 Query_Is_Secure 标志)。

于 2013-07-12T22:23:38.153 回答