Content Scripts


Content scripts是在Web页面内运行的javascript脚本。通过使用标准的DOM,它们可以获取浏览器所访问页面的详细信息,并可以修改这些信息。

当然,content scripts也有一些限制,它们不能做的事情包括 :

  • 不能使用除了chrome.extension之外的chrome.* 的接口
  • 不能访问它所在扩展中定义的函数和变量
  • 不能访问web页面或其它content script中定义的函数和变量
  • 不能跨域请求(cross-site XMLHttpRequests )

这些限制其实并不像看上去那么糟糕。Content scripts 可以使用messages机制与它所在的扩展通信,来间接使用chrome.*接口,或访问扩展数据。Content scripts还可以通过共享的DOM来与web页面通信。更多功能参见执行环境


Manifest

如果content scipt的代码总是需要注入,可以在extension manifest中的 content_scipt字段注册它。如下面的例子:

{
  "name": "My extension",
  ...
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "css": ["mystyles.css"],
      "js": ["jquery.js", "myscript.js"]
    }
  ],
  ...
}

如果只是在某些情况下需要注入,可以使用permission字段,详见Programmatic injection

{
  "name": "My extension",
  ...
  "permissions": [
    "tabs", "http://www.google.com/*"
  ],
  ...
}

使用 content_scripts 字段,一个扩展可以向一个页面注入多个content_script脚本;每个content script脚本可以包括多个javascript脚本和css文件。content_script字段中的每一项都可以包括下列属性:


安全

在写content script时,有两个安全问题必须注意。 首先, 要小心不要给原页面带来新的安全漏洞。 例如, 如果content script要从其它网站获取数据,在将数据注入前,应该进行处理以防止cross-site scripting攻击,比如用innerText注入而不是用innerHTML注入。特别要小心的是在一个HTTPS的页面上获取HTTP的内容,因为这个内容很可能是被人用man-in-the-middle方式破坏过的。

其次,尽管在独立环境中运行content script的机制已经提供了一些保护,如果不加区分的使用web页面上的内容还是可以被恶意的web页面攻击的。


详见这里


举报

© 著作权归作者所有


0