使用XMLHttpRequest进行Safari扩展编码

时间:2011-08-12 19:47:59

标签: javascript safari-extension xmlhttprequest

在我的扩展程序中,我将访问级别创建为“全部”,并为每个域添加白名单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");
        }
    } 
}

每当我运行它时,我在警告框中都没有收到标头响应以及错误警告消息。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我认为,无论它是否是扩展名,XMLHttpRequest(如果注入页面)都不允许访问页面当前域之外的任何内容。控制台只是说请求被取消了。至少,我刚刚测试的时候就是这种情况。 (我测试时,白名单或黑名单中没有任何网址,但Access选项设置为“全部”。)

您可以尝试使用代码中的XHR对象转到与要“调用”的域相同的域,然后查看它是否成功。如果是,你会知道这是因为页面的域名和XHR请求必须匹配。

但是,您似乎可以从扩展程序的全局页面执行跨站点ajax请求(奇怪的是)。至少它刚好对我有用。这实际上有点可怕(我更喜欢更多难以从扩展中调用随机服务器)但它确实有效。

不过,不知道这是否会帮助你。