【问题标题】:How does same-domain policy apply to background scripts (NON-content scripts) in Firefox and Chrome extensions?同域策略如何应用于 Firefox 和 Chrome 扩展程序中的后台脚本(非内容脚本)?
【发布时间】:2014-02-14 15:47:13
【问题描述】:

据我了解,扩展中有两种类型的脚本,一种是“内容脚本”,它从网页中的 DOM 运行并与之交互,受同源策略的约束;另一个是脚本,称为 “扩展脚本”,它们在后台运行,可能会或可能不会与网页交互,例如 Firefox 中的 main.js在 Chrome 中的 background.js。这是谷歌对扩展脚本的解释

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

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

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

示例一:从时间服务器获取时间,并显示在插件栏上。

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


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

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

【问题讨论】:

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


    【解决方案1】:

    Firefox 有两种类型的扩展:传统的Overlay 扩展和新的附加 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 网站上所写:

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

    因此,对于您的示例,它们将在 同源策略 上失败。如果可能,您必须编写一个 Overlay 扩展,或者使用 CORS、JSONP 或 other techniques 来绕过它。

    【讨论】:

      【解决方案2】:

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

      在你的扩展的 manifest.json 中:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-06-12
        • 2015-06-21
        • 1970-01-01
        • 2020-06-13
        • 2016-09-09
        • 2016-10-03
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        相关资源
        最近更新 更多