我正在开发一个Chrome应用,该应用使用jquery.ajax向我的API发出一系列请求。使用清单中的api设置的url权限,这很好用:
"permissions": [
"https://example.com/*",
"http://example.com/*"
]
但是,当我尝试将其上传到Chrome开发人员信息中心时,我收到错误消息:
The field permissions.https://example.com/ is not allowed in manifest.
我认为这是因为Chrome应用程序正在转向CORS模型,尽管网址权限仍为shown in the documentation。我正在尝试实施CORS。
{
"name": "My Extensions",
"version": "1.0.7.5",
"manifest_version": 2,
"app": {
"launch": {
"local_path": "pages/index/index.html"
}
},
"description": "Extension description.",
"content_security_policy": "script-src 'self'; object-src 'self'; connect-src self https://example.com http://example.com",
"icons": {
"16": "images/msp-16.png",
"128": "images/msp-128.png",
"256": "images/msp-256.png"
},
"minimum_chrome_version": "14",
"permissions": [
"tts",
"unlimitedStorage",
"storage"
]
}
和ajax请求:
$.ajax({
cache: false,
crossDomain: true,
async: false,
headers: {
'apikey': 'myapikey'
},
url: 'https://example/api/auth/',
type: 'POST',
data: {
data: xmlToSubmit
},
success: function(xml) {
//Do the thing
},
error: function(xhr) {
//Do the other thing
}
});
我已阅读了很多文档,包括HTML Rocks。我发送了一个自定义标题' apikey'。服务器当前配置为:
Header set Access-Control-Allow-Origin: "*"
Header set Access-Control-Allow-Methods: "POST, GET, OPTIONS"
Header set Access-Control-Allow-Headers: "apikey"
当我从应用程序发出请求时,由于尚未发送apikey标头而返回错误。我得到api生成的预期xml错误消息。我已经使用Fiddler进行了检查,并且没有发送apikey标头。我可以向其他Chrome扩展REST客户端发送成功请求到我的api,我也不需要为其他向api发送请求的应用设置服务器标头,也不需要使用原始权限。
我错过了什么?它只是预检失败了吗?我是否遗漏了允许其上传的原始权限中显而易见的内容?
答案 0 :(得分:0)
这是通过@xan和@sowbug暗示的解决的。通过更改清单以将启动后台脚本称为“新”打包应用程序,并进行一些小的代码更改,这实现了一个梦想:
"app": {
"background": {
"scripts": ["launch.js"]
}
},
访问api的url权限已添加回清单
"permissions": [
...
"https://example.com/",
"http://example.com/",
....
],
我还必须从jquery AJAX请求中删除此设置:
async: false;
在I read this之后。