Chrome扩展程序:XMLHttpRequest已取消(状态== 0)

时间:2013-06-14 09:10:40

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

我尝试从XMLHttpRequest的服务器加载json文件。 但我只得到status==0并且chrome dev控制台说:“(已取消)”

我可以用这个(简化的)代码重现这个:

var httpReq = new window.XMLHttpRequest();
httpReq.onreadystatechange = function(data) { 
  if (httpReq.readyState == 4) {
    alert(httpReq.status);
  }                
}                    
httpReq.open("GET", "http://dl.dropbox.com/[...]/data.json");
httpReq.send(null);

此代码停止工作,因为它在扩展上下文中。 同样的功能也用于从其他服务器(也是跨域)加载文件,没有任何问题。

这是清单部分:

"permissions": [ "http://theOtherWorkingServer.com/*", "http://dl.dropbox.com/*", "https://dl.dropbox.com/*" ],

我已经阅读了很多关于这个问题,但没有找到可行的解决方案。 (主页面没有重新加载,此时也没有重定向)

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您收到的错误表示已执行重定向,该网址与您声明的任何权限都不匹配。
要验证我的语句,请将*://*/*<all_urls>权限添加到清单文件中,您会注意到请求已成功完成。

要确定遵循哪些重定向,请执行以下步骤:

  1. 打开开发人员工具,转到“网络”标签。
  2. 将网址粘贴在多功能框中,然后按Enter
  3. 阅读开发人员工具中的网址。
  4. 正如您在上一张图片中看到的那样,dl.dropbox.com实际上已重定向到dl.dropboxusercontent.com。必须将此域添加到清单文件的权限部分才能解决问题:

    "permissions": [
        "http://theOtherWorkingServer.com/*",
        "*://dl.dropbox.com/*",
        "*://dl.dropboxusercontent.com/*"
    ],
    

    (计划中的通配符匹配httphttps - 请参阅match patterns