2012-01-22 82 views

回答

1

我来到了一个类似的问题,并通过以下方式解决它。

根据文档'Content-Type,我决定将脚本注入到所有文档中,但仅在正确的文档中执行,而不是限制注入内容脚本的各种文档。

这通过分析document.xmlVersiondocument.doctype属性来完成:

  • document.doctype必须不是HTML文档中null;
  • document.xmlVersion在XML文档中必须不是null;

因此,很容易使用它们中的任何一种来区分一种类型,只在适当的时候“绑定”所有必需的脚本。特别是,可以注入小的脚本加载器,这会有条件地加载其他可能很重的东西。

Chrome浏览器不提供任何方法来限制文档类型的脚本注入。

0

执行此操作的最可靠的方法是通过chrome.webRequest.onHeadersReceived,它允许您查询并保留响应标头信息(包括Content-Type)。遗憾的是,目前该稳定版本的Chrome尚未推出此API。 (您可以在Chrome的当前版本中使用实验API,但是您将无法发布使用它的扩展名。)

一种可能的解决方案是确定是否正在使用Chrome处理注入的文档作为XML。 (如果是这样,请停止处理文档。)完成此操作的一个窍门是检查document.getElementById('webkit-xml-viewer-source-xml')是否为null。 Chrome/webkit的XML查看器的这个元素部分。

+0

如果您的内容脚本在执行操作之前添加了一个事件侦听器来等待文档加载,该怎么办?例如,'document.addEventListener(“DOMContentLoaded”,function(){do.stuff()};'。 – cheeken

+0

这是我应该避免的,我的脚本必须先执行(在文档加载之前) – spektom

+0

我明白了。在这种情况下,我没有其他建议,祝你好运。 – cheeken

相关问题