【问题标题】:Chrome extension bug that could be related to cross-origin permissions可能与跨域权限有关的 Chrome 扩展程序错误
【发布时间】:2014-05-02 21:27:31
【问题描述】:

我们运行的扩展程序需要在多个网站上获取和搜索数据。

我们一直在使用 Jquery 使用跨域 XMLHttpRequests,直到现在都没有遇到问题。

异步请求正在成功执行。即使我们没有按照此处的建议明确请求跨域权限,情况也是如此:https://developer.chrome.com/extensions/xhr

这是我们清单的相关部分目前的样子:

{

"background" : {
   "scripts": ["background.js"] 
 },
"permissions" : ["storage" ],
"content_scripts" : [
    {
      "matches" : ["<all_urls>"],
      "js" : [ "jquery-2.0.0.min.js","jquery-ui-1.10.3.custom.min.js","date.js",
    "file1.js","file2.js",
    "fileN.js"],     
      "run_at" : "document_idle",
      "all_frames" : false
    },
   ],
 "content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",
  "web_accessible_resources" : [ "icona.png" , "iconb.png","iconc.png"],
  "manifest_version": 2
}

即使权限没有明确请求访问从其中异步获取数据的 url,该扩展也可以正常工作。

迟到了,我们收到了一些用户的投诉,称该扩展程序不再有效并且没有显示任何数据。我们无法在 Linux 上的 Chrome(版本 34.0.1847.132)中复制此问题。似乎面临此问题的用户似乎使用的是 Mac OS X,或者使用 Windows 的频率较低。

我们无法弄清楚为什么这个问题是特定于操作系统的,或者这是否是一种奇怪的相关性。

如果问题确实是权限错误之一,我们可以将权限设置为

["http://*/","https://*/"] 

没有自动禁用扩展以供用户手动重新启用?

我们已经通过"matches" : ["&lt;all_urls&gt;"] 要求所有url 的权限,这是否确保如上添加权限不会触发扩展的自动禁用?

【问题讨论】:

  • 我从清单中省略了背景细节。我编辑了我的问题以包含这些细节。既然有后台页面,这是否意味着内容脚本继承了权限(适用于后台页面?)
  • 我不确定我是否完全理解这一点。这是否意味着如果在访问nocrossorigin.com 时正在执行内容脚本,它就不能发送跨域请求,因为那个特定 站点不允许跨域请求。这是否意味着扩展程序当前工作的站点允许跨域请求? “他们遇到的页面”在这里是什么意思?对不起,如果答案很明显,但我无法理解它。谢谢
  • 感谢耐心的解释。因此,即使 chrome 扩展允许跨域请求,服务器也有可能根据其 CORS 策略拒绝这些请求。可以通过修改请求头信息来改变吗?
  • 删除了我的 cmets,因为他们给出了非常过时的建议。

标签: google-chrome-extension xmlhttprequest


【解决方案1】:

Chrome 扩展允许跨域请求,但您必须在清单的 permissions 部分中声明要访问的主机。内容脚本的matches 部分不应授予您主机权限。

您应该在清单中添加主机权限。我不知道更新会发生什么。考虑到用户已经被提示允许您的扩展访问他们所有的网络数据,也许您的扩展不会在更新时被禁用。您可以简单地通过使用您的原始版本在网上商店创建一个仅供测试人员使用的扩展程序来测试它,安装它,更新它,然后看看会发生什么。

【讨论】:

  • "Chrome 扩展只允许来自...的跨域请求" 版本 13 没有改变吗? chromium.googlesource.com/chromium/chromium/+/… 我也知道我们可以从内容脚本发送跨域请求,因为我们的扩展可以,而且它可以工作。感谢您关于首先将其推广给测试人员的建议。
  • Ups,我很久以前就开始开发扩展了,错过了那个变化,所以我在 cmets 中所说的大部分都是错误的。一些测试后更新的答案。对不起。
  • “当前稳定版本的 Chrome 似乎存在一个错误,它允许内容脚本向任何主机执行跨域请求,而不管权限如何。” - 这似乎不太可能。主机需要使用Access-Control-Allow-Origin 标头进行响应,扩展需要声明相关权限,或者使用了--disable-web-security 标志。您是如何得出第二段的结论的?
  • @RobW 我昨天测试过它,但事实证明这是 Chrome 没有在扩展重新加载时更新主机权限的问题。我从一个具有所有 url 权限的解压扩展开始,然后从清单中删除了权限并重新加载了扩展。我仍然可以从内容脚本上下文向任何主机发出跨域请求。
猜你喜欢
  • 2023-03-20
  • 2016-08-28
  • 2018-09-24
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多