我正在使用 XMLHttpRequest 在服务器和我正在开发的 Firefox 扩展之间交换数据。不幸的是,这些请求似乎与当前打开的页面有某种联系——如果我在当前选项卡关闭时尝试发出请求,它将失败并出现错误。如何使我的请求源自扩展程序本身,而与选项卡中发生的事情无关?
编辑:这是重现此问题的代码。它作为主要扩展主体运行(我的设计基于http://kb.mozillazine.org/Getting_started_with_extension_development的“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();
});
});
这会在打开新标签后导致“成功”,在关闭标签后会导致“错误”。我宁愿有两个成功。