Chrome扩展程序后台页面有时会返回错误Access-Control-Allow-Origin(通常在Windows XP上)

时间:2011-09-16 08:26:57

标签: javascript google-chrome google-chrome-extension xmlhttprequest

我正在编写一个从服务器请求XML内容并在弹出/对话框窗口中显示数据的扩展。我已将网站添加到我的manifest.json权限中,如下所示:

"permissions": [
    "tabs",
    "cookies",
    "http://www.mywebsite.com/*"
],

稍后我将以下代码添加到我的后台页面:

    function loadData() {
    var url = "http://www.mywebsite.com/api/data.xml";
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.onreadystatechange = function() {
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
            // do something
            // ....
            // save data
            DATA.xml = xhr;
        } else {
            // try to capture error and retry
            DATA.error = true;
            var pollInterval = 3000;
            if (DATA.t) { window.clearTimeout(DATA.t); }
            DATA.t = window.setTimeout(loadData, pollInterval);
        }
      }
    }
    xhr.send();
}

function init() {
    // do something
    loadData();
}

<body onload="init()">
</body>

有什么奇怪的是,在Windows 7机器上第一次使用(安装后)这个(几乎)总是成功并带来数据,但是在windows xp机器上(我们尝试了一些) )这(几乎)总是失败并给出错误:

XMLHttpRequest cannot load http://www.mywebsite.com/api/data.xml. Origin chrome-extension://ficdjnjlmbnjlgdimegfgbakktfnilnp is not allowed by Access-Control-Allow-Origin.

如果我点击弹出对话框或选项页面(不执行任何xml请求)的图标,那么在xp机器上还有什么内容可以正确接收!正如您在代码中看到的那样,我尝试多次重试该请求 - 它始终失败并出现相同的错误,我也试图在10秒后将初始请求延迟开始。

两种操作系统都具有相同的chrome版本:Chrome / 13.0.782.220 - 应支持跨站点xhr请求。

我希望有人可以帮我解决这个奇怪的问题...

1 个答案:

答案 0 :(得分:2)

简短的回答是:这是一个错误

答案很长:铬开发人员正在研究它,似乎只在特殊情况下发生(可能与安装的其他扩展程序有关,与试图安装的扩展程序发生冲突)。

详细信息:http://code.google.com/p/chromium/issues/detail?id=88373