2

我尝试从带有XMLHttpRequest. 但我只得到status==0并且 chrome 开发控制台说:“(取消)”

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

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/*" ],

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

有什么建议么??

4

1 回答 1

3

您收到的错误表明已执行重定向,指向与您声明的任何权限都不匹配的 URL。
为了验证我的说法,将*://*/*or<all_urls>权限添加到清单文件中,您会注意到请求成功完成。

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

  1. 打开开发人员工具,转到网络选项卡。
  2. 将 URL 粘贴到多功能框中,然后按 Enter
  3. 阅读开发者工具中的 URL。

如上图所示,dl.dropbox.com实际上重定向到dl.dropboxusercontent.com. 必须将此域添加到清单文件的权限部分,以解决问题:

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

(方案中的通配符匹配httphttps- 查看匹配模式

于 2013-06-14T12:25:19.023 回答