Chrome扩展程序中的AJAX请求失败,具有正确的清单权限?
我正在编写Chrome扩展程序,执行简单的ajax调用(基于此示例来自文档):
$.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放入我的地址栏时,我得到了这个:
[{"UID": "1", "Message": "Hello"}, {"UID": "2", "Message": "World"}, {"UID": "3", "Message": "Hello World"}]
这是我的manifest.json扩展名。
{ "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之后添加通配符到权限:
"permissions": [ "http://www.flags.99k.org/*" ]
另请参见: 匹配模式 。
编辑:更新的代码不起作用,因为http://www.flags.99k.org/
重定向到http://flags.99k.org/
(没有www
)。 所以,还要将此位置列入白名单:
"permissions": [ "http://flags.99k.org/*", "http://www.flags.99k.org/*" ]
而不是……
alert("FAILURE: " + response);
…做…
console.debug('FAILURE'); console.debug(response);
然后,如果你去控制台(在Windows上的ctrl-shift-j),你会看到一个对象,你可以扩展它以查看它的所有属性,什么不是,这真的有帮助。 另外,您在执行请求时是否看过控制台? 您可能会收到一些错误消息。
这可能是一个跨域问题。
当您在地址栏中输入URL时,它可以正常工作,因为它是从主机传送到您的浏览器的。
因为您试图访问托管域之外的完整URL,您可能需要使用JSONP。