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

标签 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.

还有什么,在 xp 机器上,如果我单击弹出对话框或选项页面的图标(不执行任何 xml 请求),则内容会被正确接收!正如您在代码中所看到的,我尝试多次重试该请求 - 它总是因相同的错误而失败,而且我还尝试将初始请求延迟 10 秒后开始。

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

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

最佳答案

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

长答案:它正在由 chromium 开发人员处理,似乎只发生在特殊场景中(可能与安装的另一个扩展与尝试安装的扩展发生冲突有关)。

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

关于javascript - Chrome 扩展后台页面仅有时返回错误 Access-Control-Allow-Origin(通常在 Windows XP 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7441996/

相关文章:

javascript - 在组合中使用 Object.assign() 时可以使用相同的函数名称吗?

javascript - Point in Polygon Hit Test in JavaScript (Chrome bug)

javascript - 在 JS 控制台 Chrome 中看不到对象的原型(prototype)

html - 将 padding-box 与 border-image 结合使用会在 Chrome 中添加不需要的细线

google-chrome-extension - 使用 chrome.* 或 browser.* 的 Firefox/Chrome/MS Edge 扩展

javascript - 我在哪里从库中获取变量的 typescript 类型

javascript - 如何动态添加id到表行,以便它们可以被唯一标识

javascript - 如何在 JavaScript 文件中初始化 HTML 文件中的函数? (Chrome 应用程序)

javascript - 在监控XMLHttpRequest时,如何检测请求是否是xhr?

javascript - 为什么JavaScript在常见的浏览器中没有得到自己的线程?