我正在使用Borland Delphi 6.0创建一个浏览器帮助对象(BHO)(为了完整起见,这是2001年版Delphi版本,它编译了一个原生的32-我注册用于Internet Explorer的位DLL。
BHO的目的是向原始内容不具备的特定网页元素添加额外信息。所以,作为我想要实现的那种事情的一个例子,这可能意味着在图像中添加一个工具提示,显示图片显示内容和创建时间的详细信息 - 我使用 QTip 为此目的,一个基于 JQuery 构建的Javascript弹出窗口。
我使用BHO的Delphi组件在DOM中搜索我有兴趣修改的页面元素,将这些元素包含在具有唯一类属性的span中,然后将几个脚本注入到DOM HEAD中(脚本是作为资源编译到BHO,在页面加载时检索,然后完整地写入文档 - 为每个文档创建一个新的IHTMLScriptElement,然后将检索到的脚本分配给脚本元素的text属性。)
脚本处理寻找我们的那些跨度,然后创建QTip对象,当用户在任何目标页面元素上“鼠标悬停”时会出现这些对象(有3个脚本,JQuery副本,副本QTip,以及我寻找span元素的脚本。)
这在我的工作环境中运行良好:带有Internet Explorer 8.0的Windows XP SP3
当我在更新的Windows版本上注册BHO并使用更新的Internet Explorer - 9或更高版本时,问题就开始了。 在这里,当我打开一些用于测试的网页时,页面底部会显示一条消息,说明:
“仅显示安全内容”
并提示我允许或禁止被阻止的内容。被阻止的内容似乎是我从BHO注入页面的脚本。
所以,问题1是:有什么方法可以阻止IE为我注入的脚本显示此消息而不更改客户端计算机?
另外,当我第一次注册我的BHO并启动IE时,我在屏幕底部收到一条消息:
“来自未知发布商的''附加组件已准备就绪”
问题2是,呃,双重。首先,有什么方法可以在注册时以编程方式标记我的BHO“准备好使用”以防止出现此消息?或者,或者,删除险恶的“未知出版商”标签的过程是什么 - 我假设这将涉及某种昂贵的数字签名过程,但我无法找到任何有关它的信息。
问题3 ,从前一个开始,如果我点击“启用”,当IE告诉我“加载项......已准备好使用”时,它将无效我重启了网络浏览器。我不知道是否有办法解决这个问题,并让它立即开始运作,或者其他情况,警告用户必须重新启动浏览器才能做任何有用的事情 - 建议?
提前感谢您提出任何建议和时间
附录,SO抱怨我需要1500或者更高的声誉来添加我认为与我的问题最相关的一些标签(例如“浏览器助手对象”),所以道歉在他们的选择中选择不那么有意义的标签地方。
答案 0 :(得分:1)
不,您不能“预先批准”您的分机,以避免“准备就绪”通知。如果您尝试这样做,Microsoft将考虑您的扩展恶意软件,并可以阻止它完全加载到IE中,将其分发为恶意软件等的网站。您根本就不应该尝试。
您必须重新启动浏览器才能使用该扩展程序;在重新启动浏览器之前无法使其正常工作(或者在新的选项卡过程中启动一个新选项卡)。
您的代码存在的问题是它正在注入未使用安全URL的内容(例如,将HTTP URL注入HTTPS页面)。你注射了什么类型的URL?您使用的是RES://协议还是其他协议?如果您使用扩展实现的自定义URL协议,则需要将该协议配置为“安全”协议(请参阅QueryInfo方法中的Query_Is_Secure标志)。