我正在使用XMLHttpRequest在服務器和Firefox擴展之間交換數據。不幸的是,這些請求似乎與當前打開的頁面有某種聯繫 - 如果我在當前選項卡關閉時嘗試發出請求,它將失敗並顯示錯誤。我怎樣才能使我的請求源於擴展本身,而不依賴於標籤中發生了什麼?來自Firefox擴展的XMLHttpRequest
編輯:這是重現此問題的代碼。它作爲主擴展機構運行(我的設計基於「Hello world」教程,來自http://kb.mozillazine.org/Getting_started_with_extension_development,因此沒有附加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();
});
});
這會導致在打開新選項卡後顯示「SUCCESS」,關閉後顯示「ERROR」。我寧願有兩個成功。
請向我們展示一些代碼 - 您如何/在哪裏創建XMLHttpRequest?我猜你使用附加SDK並從內容腳本執行它? – 2012-04-27 06:05:46
@WladimirPalant我製作了一個簡化的測試案例來展示問題。我沒有使用附加SDK,並且就我對上述教程的理解而言,此代碼作爲內容腳本運行。 – 2012-04-27 14:17:17
請在代碼中檢查'win.location.href'的值 - 我很確定它是瀏覽器窗口,而不是內容頁面。因此,您正在等待瀏覽器窗口關閉而不是選項卡。 – 2012-04-27 21:00:12