我正在为一个需要访问minus.com的Chrome扩展编写代码,minus.com使用oAuth 2.0进行身份验证,所以我编写了一个javascript文件"test.js",然后将其包含在HTML文件"test.HTML"中,然后在Chrome中加载"test.HTML"来测试用于身份验证的javascript代码。
"test.js"的结构如下:
function Ajax(url, options) {
// some function content
// Sending data
if (options.method === "POST" && (options.params || options.binaryData)) {
if (options.binaryData) {
xhr.sendAsBinary(options.binaryData);
} else {
xhr.send(hashToQueryString(options.params));
}
} else {
xhr.send(null);
}
return xhr;
}
function refreshToken(refresh_token) {
var params = {
'grant_type': 'refresh_token',
'client_id': API_KEY,
'client_secret': API_SECRET,
'refresh_token': refresh_token,
'scope': 'read_all modify_all upload_new'
}
new Ajax("https://minus.com/oauth/token", {
params: params,
onSuccess: function(response) {
console.log(response.access_token);
},
onError: function(response) {
console.log('error: wrong_token');
}
});
}
refreshToken();
当我在Chrome中加载"test.html"来测试"test.js"时,它在控制台中提示了一个错误,说"XMLHttpRequest无法加载https://minus.com/oauth/token?...原始文件://不允许访问控制允许原始文件。"我试着用"-允许从文件访问文件"或"-禁用网络安全"选项启动Chrome,但它没有解决问题。然而,如果我评论了"Ajax"功能中的"发送数据"部分,没有错误。
有人知道这里发生了什么吗?
谢谢!
要非常具体地说明您的问题:您需要将希望能够跨域访问的主机添加到您的扩展清单中:
http://code.google.com/chrome/extensions/xhr.html
{
"name": "My extension",
...
"permissions": [
"https://*.minus.com/"
],
...
}
编辑
顺便说一句,当我有很多扩展活动时,我的chrome有时会出现奇怪的跨域错误。然后我必须禁用至少两个,刷新扩展,它就可以工作了——或者有时重新启动chrome。
您可以通过使应用程序成为支持跨域调用的打包应用程序来解决此问题。托管应用程序没有。
您可能还想阅读chrome扩展中的Cross-Origin XMLHttpRequest