Google chrome extension 可能与跨源权限相关的Chrome扩展错误

Google chrome extension 可能与跨源权限相关的Chrome扩展错误,google-chrome-extension,xmlhttprequest,Google Chrome Extension,Xmlhttprequest,我们运行一个扩展,需要在多个网站上获取和搜索数据 我们一直在使用Jquery使用跨源XMLHttpRequests,到目前为止还没有遇到任何问题 异步请求正在成功执行。即使我们没有按照此处的建议明确请求跨源许可,情况仍然如此: 这就是我们舱单的相关部分目前的样子: { "background" : { "scripts": ["background.js"] }, "permissions" : ["storage" ], "content_scripts" : [ {

我们运行一个扩展,需要在多个网站上获取和搜索数据

我们一直在使用Jquery使用跨源XMLHttpRequests,到目前为止还没有遇到任何问题

异步请求正在成功执行。即使我们没有按照此处的建议明确请求跨源许可,情况仍然如此:

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

{

"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
}
没有自动禁用扩展以供用户手动重新启用


我们已经通过
“matches”要求对所有URL拥有权限:[“”]
这是否确保上述权限的添加不会触发自动禁用扩展?

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


您应该将主机权限添加到清单中。我不知道更新后会发生什么。考虑到用户已经被提示允许您的扩展访问其所有web数据,也许您的扩展不会在更新时被禁用。您只需使用原始版本在webstore上创建一个仅限测试员的扩展来测试它,然后安装、更新它,看看会发生什么。

我在清单中遗漏了背景详细信息。我编辑了我的问题以包含这些细节。由于有一个后台页面,这是否意味着内容脚本继承了权限(适用于后台页面?)我不确定我是否完全理解这一点。这是否意味着,如果访问时正在执行内容脚本,则无法发送跨源请求,因为该特定站点不允许跨源请求。这是否意味着扩展当前工作的站点允许跨源请求?“他们遇到的页面”在这里是什么意思?如果答案很明显,我很抱歉,但我不能对此置之不理。谢谢你耐心的解释。因此,即使chrome扩展允许跨源请求,服务器也可以根据其CORS策略拒绝这些请求。这可以通过修改请求标题信息来改变吗?删除了我的评论,因为它们给出了非常过时的建议。“Chrome扩展只允许来自…的跨源请求”这一点在版本13中没有改变吗?我还知道,我们可以从内容脚本发送跨源请求,因为我们的扩展可以,而且它可以工作。谢谢你的建议,关于首先向测试人员推出它。Ups,我很久以前就开始开发扩展了,但是错过了这个变化,所以我在评论中说的大部分都是错误的。经过一些测试后更新了答案。抱歉。“当前稳定版本的Chrome似乎存在漏洞,允许内容脚本对任何主机执行跨源请求,而不管其权限如何。”-这似乎不太可能。主机需要使用
访问控制允许来源
头进行响应,扩展需要声明相关权限,或者使用了
--禁用web安全
标志。你是如何在第二段中得出结论的?@RobW我昨天已经测试过了,但结果证明这是Chrome在重新加载扩展时没有更新主机权限的问题。我从一个具有“所有URL”权限的未打包扩展开始,然后从清单中删除该权限并重新加载扩展。我仍然可以从内容脚本上下文向任何主机发出跨源请求。
["http://*/","https://*/"]