来自Chrome扩展程序的Cross-Origin XMLHttpRequest返回状态0

时间:2013-01-27 19:19:51

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

我正在编写Chrome扩展程序,需要从其他网站加载一些数据。根据我的研究,我相信我应该使用XMLHttpRequest,但它会为我尝试的每个站点返回responseText =“”和status = 0。我传递给javascript的网址很好;我试过了

http://www.google.com

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22MSFT%22)&env=store://datatables.org/alltableswithkeys

我做无知/愚蠢的事吗?我相信它是清单中的权限,但我现在应该允许这两个网站。我在javascript控制台中看到没有错误。

清单:

{
  "manifest_version": 2,

  "name": "nnnn",
  "description": "nnnn",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "storage",
    "http://*.query.yahooapis.com/*",
    "http://*/*",
    "https://*/*"    
  ]
}

javascript函数:

function getSite(queryUrl) {
  var request = new XMLHttpRequest();
  request.open("GET", queryUrl, true);
  console.log(queryUrl);
  request.onreadystatechange = function () {
    console.log(request);
   if (request.readyState == 4) {
      if (request.status == 200) {
        console.log(request.responseText);
      } else {
        console.log('Unable to resolve address');
      }
    }
  };
  request.send(null);
}

修改 http://developer.chrome.com/extensions/xhr.html 这几乎是我一直关注的指导,但显然有些事情已经过去了。

2 个答案:

答案 0 :(得分:2)

我不相信这是与许可相关的问题。如果是,则在控制台中会出现一条错误消息,告知权限问题。我认为你的XMLHttpRequest有问题。确保传递给函数的queryUrl正确无误。

您可以使用Fiddler查看您的请求有什么问题。

答案 1 :(得分:2)

我做了一些无知的事情并且有一个表单提交导致页面刷新并在完成之前丢弃之前的XMLHttpRequest