我正在使用 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或更高的声誉才能添加一些我认为与我的问题最相关的标签(例如“浏览器帮助对象”),因此很抱歉在他们的位置选择不太有意义的标签。