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

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

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

"...have a single long-running script to manage some task or state ...the background page is an HTML page that runs in the extension process. It exists for the lifetime of your extension, and only one instance of it at a time is active"

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

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

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

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


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

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

最佳答案

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

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

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

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

这里有一个包含更多信息的引用:http://developer.chrome.com/extensions/xhr.html

关于google-chrome-extension - 同域策略如何应用于 Firefox 和 Chrome 扩展中的后台脚本(非内容脚本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319299/

相关文章:

javascript - 如何在页面的 Javascript 执行后加载内容脚本?

javascript - jquery 引用出错并同时获取两个版本的 jquery

javascript - 当工作站被锁定时收到通知

css - 使用没有盒装外观的 firefox-addon SDK 面板模块

javascript - 如何等待回电?

javascript - 在与网站相同的选项卡中以编程方式打开 Chrome 扩展页面

ruby-on-rails - Rails + ActionCable + 乘客 + AWS Elasticache (Redis) : how to fix 'WebSocket is closed before the connection is established.' on production?

python - 由 zeromq 触发的 nginx 背后的 Websockets?

javascript - 从网页检测我自己的 Firefox 扩展

jquery - executeScript 未填充全局变量 - Chrome 扩展