在我的扩展程序中,我将访问级别创建为“全部”,并为每个域添加白名单http://*/*
。
我的JS文件中有以下代码(作为结束脚本运行):
var feedbackmsg = "message goes here";
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://mysitename.com/feedback.php', true);
xmlhttp.onreadystatechange = handleServerResponse;
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send("html=" + feedbackmsg);
function handleServerResponse() {
if (xmlhttp.readyState == 4) {
alert(xmlhttp.getAllResponseHeaders());
if (xmlhttp.status == 200) {
alert("send");
} else {
alert("error");
}
}
}
每当我运行它时,我在警告框中都没有收到标头响应以及错误警告消息。我该如何解决这个问题?
答案 0 :(得分:2)
我认为,无论它是否是扩展名,XMLHttpRequest(如果注入页面)都不允许访问页面当前域之外的任何内容。控制台只是说请求被取消了。至少,我刚刚测试的时候就是这种情况。 (我测试时,白名单或黑名单中没有任何网址,但Access选项设置为“全部”。)
您可以尝试使用代码中的XHR对象转到与要“调用”的域相同的域,然后查看它是否成功。如果是,你会知道这是因为页面的域名和XHR请求必须匹配。
但是,您似乎可以从扩展程序的全局页面执行跨站点ajax请求(奇怪的是)。至少它刚好对我有用。这实际上有点可怕(我更喜欢更多难以从扩展中调用随机服务器)但它确实有效。
不过,不知道这是否会帮助你。