相同域策略如何适用于Firefox和Chrome扩展名中的背景脚本(非关注脚本)



对我的理解,扩展程序中有两种类型的脚本,一个是" content Scripts",它来自WebPages中的DOM并与DOM进行交互,这些脚本由相同的原点策略控制;另一个是脚本,将其称为"扩展脚本" ,它在后台运行,并且可能与WebPages进行交互,例如Firefox或中的 main.js chrome中的Background.js 。这是Google的扩展脚本的解释

" ...有一个长期运行的脚本来管理某些任务或状态...背景页面是一个在扩展过程中运行的HTML页面。它存在于您的扩展的一生中,只有一个实例它一次是活动的"

因此,问题是,相同原始策略如何应用于"扩展脚本" ?为什么这些脚本独立于要查看的网页上的内容?无论如何,扩展脚本的是什么?(Google说"扩展尝试使用自身以外的安全来源",但没有明确说明该来源是什么。)

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

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

示例二:一个扩展程序,该扩展名检查了是否已更新来自任意域(或书签但已关闭页面)的最近关闭的页面,并在用户(如果是封闭式页面)上发出警报。


我知道Chrome中的跨域HTTP和FTP请求可以通过在声明权限http://*/之后使用xmlhttprequest来实现。但是Firefox呢?其他协议,例如SMTP,PPP等呢?

在扩展脚本中使用的HTML5中的Websocket是由同域策略所束缚的吗?

chrome扩展名(包括背景页面)限于与常规网页一样的来源策略。但是,您可以在Chrome App的清单或扩展名的清单中请求交叉来源权限,这将使您的XHR成功。因此,您应该能够使用此方案进行示例1。我不确定如何在上面进行示例2。

在您的扩展名清单中:

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

我会让别人回答有关Firefox的问题。

这里有更多信息:http://developer.chrome.com/extensions/xhr.html

firefox具有两种类型的扩展名:传统覆盖扩展和新附加SDK扩展

覆盖扩展不受相同的原点策略的约束,例如,以下jQuery代码对我有用:

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

然而,对于新的附加SDK扩展名,情况与Google Chrome扩展名几乎相同:"扩展脚本"受相同的Origin Policy的限制您可以在package.json中使用跨域属性属性:

"permissions": {
  "cross-domain-content": ["http://example.org/", "http://example.com/"]
}

在此属性中不允许通配符。您必须要求在MDN网站上写的特定域:

列出的域必须包括方案和完全合格的域名,这些域必须与为内容服务的域完全匹配...

因此,对于您的示例,它们将在相同的原始策略上失败。您必须编写覆盖扩展名,也必须使用CORS,JSONP或其他技术来解决它。

相关内容

  • 没有找到相关文章

最新更新