我使用chrome.identity.getAuthToken
与一些内部API交谈。
在前20个小时里,一切都很完美,我可以调用API并获得我需要的东西。
大约20个小时后,我的分机停止了工作,我得到了:
请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“https://MY_API”访问。
我知道chrome.identity.getAuthToken
会续订已过期的令牌,我可以看到chrome://identity-internals/
,我的代码获取了一个新的访问令牌但无法发送请求。
如果我再次卸载/安装扩展程序,那么它再次正常运行。
清单包含:
"permissions": [ "tabs", "activeTab", "cookies", "identity", "<all_urls>" ]
当我重新安装扩展程序时会发生什么情况会导致错误消失?
background.js:
chrome.identity.getAuthToken({interactive: true}, function(token) {
gapi.auth.setToken({'access_token': token});
// Load the storage API.
gapi.client.load(API_ROOT + DISCOVERY_PATH,
VERSION, function() {
// Initialize GAPI's OAuth.
gapi.auth.init(function() {
var request = "It's request to my API";
// Not working after 20 hours
request.execute(function(response) {
// do something
});
});
});
})
还尝试调用“chrome.identity.removeCachedAuthToken”,但扩展程序在20小时内停止工作。
答案 0 :(得分:0)
在服务器&#34; https://MY_API&#34;设置此设置:
Header always append X-Frame-Options SAMEORIGIN
Header add Access-Control-Allow-Origin "*"
在.htaccess或httpd.conf中(如果服务器是httpd / apache)
答案 1 :(得分:0)
卸载/重新安装扩展时,其内部状态完全被擦除;这使得您的代码获得了一个完全新鲜的令牌,而不是刷新以前获得的令牌。
至于Access-Control-Allow-Origin
标头 - 这是一个服务器端响应标头,我们只能猜测为什么这会改变一些随机的第三方API(你甚至没有)名称)。一个合理的猜测是你正在达到一定的速率限制或配额,尽管使用CORS非常奇怪。
这个特定的错误可以被requesting cross-origin permissions永久删除,这使得Chrome会忽略来自扩展程序(包括内容脚本)的请求的CORS。但是,您应该仔细检查API的使用条款(如果有)。