如何将Chrome扩展程序内容脚本限制为特定的内容类型?

时间:2012-01-22 12:20:49

标签: google-chrome google-chrome-extension

是否可以仅在文档的内容类型与特定模式匹配时才注入内容脚本?实际上,我的目标更简单:我需要将我的内容脚本注入HTML文档 (现在,它也注入了XML文档)。必须在“document_start”处注入内容脚本。

2 个答案:

答案 0 :(得分:1)

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

我没有限制注入内容脚本的各种文档,而是基于文档“Content-Type,我决定将脚本注入所有文档,但只在适当的文档中执行。”

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

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

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

Chrome仍然没有提供任何按文档类型限制脚本注入的方法。

答案 1 :(得分:0)

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

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