【发布时间】:2014-10-25 22:54:32
【问题描述】:
我正在制作一个 Firefox 插件,我正在尝试从一个 Firefox 插件面板向网站发出 AJAX 请求。
这是我目前所拥有的:
package.json
{
//[...]
"permissions": {
"cross-domain-content": ["http://www.website.com", "https://www.website.com"]
}
}
main.js
var data = require("sdk/self").data;
var extension_panel = require("sdk/panel").Panel({
contentURL: data.url("menu.html"),
contentScriptFile: data.url("menu.js")
});
//[...]
menu.js
//[...]
$.ajax({
type: "GET",
url: "https://www.website.com/currentUser",
success: function(e){
$("#loading").hide();
},
error: function(e){
$("#loading").hide();
if (e.status == 401){
show_login();
return;
}
show_login();
$("#login-error").text("Couldn't check login status!").show();
}
});
//[...]
每次我运行这个插件时,它都会不断地给出Couldn't check login status! 消息。
当我记录错误对象时,status 是 404,statusText 是 "error"。
我想我已经在package.json 中正确设置了所有内容,那么为什么插件不允许我发出 AJAX 请求?
编辑
404 在这种情况下并不意味着 URL 不存在。在这个扩展程序的 Chrome 版本中,一切正常,所以我知道网站在最后一刻没有改变。
【问题讨论】:
-
@dandavis 是的,但是在这个插件的 Chrome 版本中,URL 工作得很好。
-
可能还需要额外的标题。检查 API 文档
-
@charliefl 什么标题?当用户登录时,网站会返回一个
200,而其他所有请求都会返回一个401。 -
看起来您正在使用 jquery。因此,ajax 不是来自“背景”页面(google chrome ext dev lingo),而是来自页面本身,这当然不允许跨域 xhr。您必须从非 contentScript 范围 xhr,这应该可以。我不熟悉插件 sdk,所以我不确定 package.json 中的
cross-domain-content是如何工作的,但我添加了 sdk 标记,应该可以让你得到更好的回复 -
@dandavis 我已经进行了调试。没有任何有用的东西出现。
标签: jquery ajax firefox-addon firefox-addon-sdk