Chrome扩展程序20小时后没有“Access-Control-Allow-Origin”标题

时间:2016-06-30 17:21:33

标签: javascript google-chrome google-chrome-extension oauth-2.0 cors

我使用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小时内停止工作。

2 个答案:

答案 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的使用条款(如果有)。