同域策略如何应用于Firefox和Chrome扩展中的后台脚本(非内容脚本)?

时间:2014-01-23 21:06:24

标签: google-chrome-extension websocket firefox-addon cross-domain

据我所知,扩展中有两种类型的脚本,一种是“内容脚本”,它们在网页中运行,并与网页中的DOM交互,这些脚本由相同的源策略管理;另一个是脚本,称之为“扩展脚本”,它们在后台运行,可能会也可能不会与网页交互,例如Firefox或中的 main.js Chrome中的background.js 。以下是Google对扩展程序脚本的解释

  

“...有一个长时间运行的脚本来管理某个任务或状态......后台页面是一个在扩展过程中运行的HTML页面。它存在于您的扩展的生命周期中,并且只有一个实例它一次是活跃的“

所以问题是,同源策略如何应用于“扩展脚本”?为什么要这样,因为这些脚本独立于正在浏览的网页上的内容?无论如何,扩展脚本的是什么? (谷歌说"extension attempts to use a security origin other than itself",但没有明确说明原点是什么。)

可以在扩展程序中完成以下操作吗?

示例一:从时间服务器获取时间,并将其显示在附加栏上。

示例二:一个扩展程序,用于检查来自任意域(或已添加书签但已关闭的页面)的最近关闭的页面是否已更新,并提醒用户是否存在。


我知道Chrome中的跨域HTTP和Ftp请求可以在声明权限后使用XMLHttpRequest完成Http:// * /。但是Firefox呢?那些其他协议呢,比如smtp,ppp等?

HTML5中的WebSocket,在扩展脚本中使用,是否受同域策略的束缚?

2 个答案:

答案 0 :(得分:1)

Chrome扩展程序(包含的背景页面)仅限于与常规网页相同的原始政策。但是,您可以在Chrome应用或扩展程序的清单中请求跨源权限,以便您的XHR成功。因此,您应该能够使用此方案执行示例1。我不确定你怎么能做上面的例子。

在您的扩展程序的manifest.json中:

"permissions": [
    "http://www.google.com/"
  ],

我会让其他人回答关于Firefox的问题。

此处提供了更多信息:http://developer.chrome.com/extensions/xhr.html

答案 1 :(得分:1)

Firefox有两种类型的扩展:传统叠加扩展和新的附加SDK扩展

叠加扩展程序不受相同的原始策略的约束,例如以下jQuery代码对我有用:

$.get("http://www.example.org", function() { /* do something */ } );

但是对于新的附加SDK扩展,情况与Google Chrome扩展程序几乎相同:“扩展程序脚本”受同一来源政策的限制并且您可以使用cross-domain-content属性

将package.json中的域列入白名单
"permissions": {
  "cross-domain-content": ["http://example.org/", "http://example.com/"]
}

此属性中不允许使用通配符。您必须请求特定域,如MDN网站上所写:

  

列出的域名必须包含方案和完全限定的域名,这些域名必须与提供内容的域名完全匹配...

因此,对于您的示例,他们将在相同的原始政策上失败。如果可能的话,您必须编写覆盖扩展,或使用CORS,JSONP或other techniques来绕过它。