【发布时间】:2013-07-11 11:26:13
【问题描述】:
我正在使用 Borland Delphi 6.0 创建一个 Browser Helper Object (BHO)(为了完整起见,这是 2001 年的 Delphi 版本,它编译了原生 32-位 DLL,我注册用于 Internet Explorer)。
BHO 的目的是为特定网页元素添加原始内容所不具备的额外信息。因此,作为我想要实现的那种事情的一个例子,这可能意味着向图像添加一个工具提示,显示有关图片显示内容和创建时间的详细信息 - 我使用 QTip 为此,一个基于 JQuery 的 Javascript 弹出窗口。
我使用 BHO 的 Delphi 组件在 DOM 中搜索我有兴趣修改的页面元素,将这些元素包装在具有唯一类属性的 span 中,然后将几个脚本注入 DOM HEAD(脚本是作为资源编译到 BHO 中,在页面加载时检索,然后将其完整写入文档 - 为每个 IHTMLScriptElement 创建一个新的 IHTMLScriptElement,然后将检索到的脚本分配给脚本元素的 text 属性。
脚本处理寻找我们的那些跨度,然后创建 QTip 对象,当用户在任何目标页面元素上“鼠标悬停”时将出现这些对象(有 3 个脚本,一个 JQuery 副本,一个QTip 和我的用于查找 span 元素的脚本)。
这在我的工作环境中运行良好:带有 Internet Explorer 8.0 的 Windows XP SP3
当我使用更新的 Internet Explorer 副本(9 或更高版本)在更新的 Windows 版本上注册 BHO 时,问题就开始了。 在这里,当我打开一些用于测试的网页时,页面底部会显示一条消息:
“仅显示安全内容”
并提示我允许或禁止被阻止的内容。被阻止的内容似乎是我从 BHO 注入页面的脚本。
所以,问题 1 是:有什么方法可以阻止 IE 为我注入的脚本显示此消息,而无需更改客户端计算机?
另外,当我第一次注册我的 BHO 并启动 IE 时,我在屏幕底部收到一条消息:
“来自未知发布者的 '' 附加组件已准备好使用”
所以问题 2 是,呃,是双重的。首先,有什么方法可以在注册 BHO 时以编程方式将其标记为“可供使用”,以防止出现此消息?或者,或者,删除听起来险恶的“未知出版商”标签的过程是什么 - 我假设这将涉及某种昂贵的数字签名过程,但我无法找到任何有关它的信息。
问题 3,继上一个问题之后,如果我在 IE 告诉我“加载项...已准备好使用”时单击“启用”,它将无法工作,直到我重新启动网络浏览器。我不知道是否有任何方法可以解决这个问题并让它立即开始运行,或者提醒用户必须重新启动浏览器才能执行任何有用的操作 - 建议?
提前感谢您的任何建议和您的时间
附录,SO 抱怨我需要 1500 或更高的声誉才能添加一些我认为与我的问题最相关的标签(例如“浏览器帮助器对象”),因此很抱歉在他们的标签中选择了不太有意义的标签地方。
【问题讨论】:
-
为什么不使用 //domain 而不是 domain 注入您的脚本,这样它会根据当前使用的域自动使用 http 或 https。这当然意味着您的域需要支持 SSL。
-
嗨,凯文,谢谢。正如我在下面的回复中对 Eric 所提到的,当我说我正在“注入”脚本时,我认为我可能使用了错误的语言。我将它们写到我添加到文档中的 IHTMLScriptElement 中。那么请原谅我的无知,但我不确定“域”与“//域”指的是什么。
-
我现在看到您指的是“无协议或相对协议”的 URL。由于我不是添加指向外部脚本的链接,而是添加脚本本身的文本,因此很遗憾,这无济于事,尽管我很感谢您的建议。
标签: internet-explorer bho