Javascript 来自Firefox扩展的XMLHttpRequest

Javascript 来自Firefox扩展的XMLHttpRequest,javascript,firefox-addon,xmlhttprequest,Javascript,Firefox Addon,Xmlhttprequest,我正在使用XMLHttpRequest在服务器和我正在开发的Firefox扩展之间交换数据。不幸的是,这些请求似乎与当前打开的页面有某种联系——如果我试图在当前选项卡关闭时发出请求,它将失败并出现错误。我如何使我的请求来自扩展本身,而不受选项卡中发生的事情的影响 编辑:下面是重现此问题的代码。它作为主扩展主体运行(我的设计基于来自的“Hello world”教程,因此没有附加SDK)。这意味着它的执行位置与上面教程中“overlay.js”中的代码相同 function createXMLHtt

我正在使用XMLHttpRequest在服务器和我正在开发的Firefox扩展之间交换数据。不幸的是,这些请求似乎与当前打开的页面有某种联系——如果我试图在当前选项卡关闭时发出请求,它将失败并出现错误。我如何使我的请求来自扩展本身,而不受选项卡中发生的事情的影响

编辑:下面是重现此问题的代码。它作为主扩展主体运行(我的设计基于来自的“Hello world”教程,因此没有附加SDK)。这意味着它的执行位置与上面教程中“overlay.js”中的代码相同

function createXMLHttpRequest() {
    return Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
       .createInstance(Components.interfaces.nsIXMLHttpRequest);    
}

function issueRequest() {
    var req = createXMLHttpRequest();
    req.open("GET", "http://google.com", true);
    req.addEventListener("load", function(event) {
        alert("SUCCES");
    });
    req.addEventListener("error", function(event) {
        alert("ERROR");
    });
    req.send();
};

window.addEventListener("DOMContentLoaded",  function(event) {
    issueRequest();

    var doc = event.originalTarget;
    var win = doc.defaultView;

    win.addEventListener("unload", function(event) {
        issueRequest();
    });
});

这将导致打开新选项卡后出现“成功”,关闭选项卡后出现“错误”。我希望有两次成功。

如果该脚本在浏览器窗口覆盖中运行,那么您将
DOMContentLoaded
处理程序附加到了错误的节点-只有在浏览器窗口本身加载时才会收到通知。因此,您的
unload
处理程序将等待浏览器窗口关闭,您可能打算等待选项卡关闭。正确的代码如下所示:

//在执行任何操作之前,请等待浏览器窗口加载
addEventListener(“加载”,函数(){
//将侦听器附加到tabbrowser以获得有关新页面的通知
window.gBrowser.addEventListener(“DOMContentLoaded”,函数(事件){
issueRequest();
var doc=event.originalTarget;
var win=doc.defaultView;
win.addEventListener(“卸载”),函数(事件){
issueRequest();
});
},假);
},错)

请向我们展示一些代码-如何/在何处创建
XMLHttpRequest
?我猜您使用了附加SDK,并通过内容脚本完成了它?@WladimirPalant我已经生成了一个简化的测试用例,显示了这个问题。我没有使用附加SDK,就我对上述教程的理解而言,这段代码是作为内容脚本运行的。请检查代码中
win.location.href
的值-我非常确定它是浏览器窗口,而不是内容页。因此,您正在等待浏览器窗口关闭,而不是选项卡关闭。我确实在侦听整个浏览器中的事件-但是来自选项卡的DOMContentLoaded事件始终在那里冒泡,因此我得到的事件与您的代码相同+与加载chrome元素相关的事件。我尝试了你的代码,但它(不)的工作方式与我的相同-关闭选项卡警报错误。win和win.location.href在my和yours版本中分别相同(打开google时):“Window www.google.com”和“”