Chrome扩展程序中的AJAX请求失败,具有正确的清单权限?

Failing AJAX request in a Chrome extension, with correct manifest permissions?

我正在编写Chrome扩展程序,它执行简单的ajax调用(基于此示例来自文档):

1
2
3
4
5
6
7
8
$.ajax({
    type:"GET",
    url:"http://www.flags.99k.org/getFlags.php"
}).done(function(response) {
    alert("SUCCESS:" + response);
}).fail(function(response) {
    alert("FAILURE:" + response);
});

请求始终失败,因为警报显示:FAILURE: [object Object]
该URL有效:当我将http://www.flags.99k.org/getFlags.php放入我的地址栏时,我得到了这个:

1
[{"UID":"1","Message":"Hello"}, {"UID":"2","Message":"World"}, {"UID":"3","Message":"Hello World"}]

这是我的manifest.json扩展名。

1
2
3
4
5
6
7
8
9
10
11
12
{
 "name":"Hello World",
 "version":"1.0",
 "description":"The first extension that I made.",
 "browser_action": {
   "default_icon":"icon.png",
   "default_popup":"popup.html"
  },
 "permissions": [
     "http://www.flags.99k.org/"
  ]
}

我使用Chromium 17.0.963.79(Developer Build 125985 Linux)Ubuntu 11.10。


目前,只允许通过清单中的权限访问根目录。您必须在URI之后添加通配符到权限:

1
2
3
 "permissions": [
   "http://www.flags.99k.org/*"
  ]

另请参见:匹配模式。

编辑:更新的代码不起作用,因为http://www.flags.99k.org/重定向到http://flags.99k.org/(没有www)。所以,还要将此位置列入白名单:

1
2
3
4
 "permissions": [
   "http://flags.99k.org/*",
   "http://www.flags.99k.org/*"
  ]


而不是......

1
alert("FAILURE:" + response);

...做...

1
2
console.debug('FAILURE');
console.debug(response);

然后,如果你去控制台(在Windows上的ctrl-shift-j)你会看到一个对象,你可以扩展它以查看它的所有属性,什么不是,这真的有帮助。另外,您在执行请求时是否看过控制台?您可能会收到一些错误消息。


这可能是一个跨域问题。

当您在地址栏中输入URL时,它可以正常工作,因为它是从主机传送到您的浏览器的。

因为您试图访问托管域之外的完整URL - 您可能需要使用JSONP。