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