我正在開發引導式Firefox插件。在我startup
功能我構建對象的新實例,與下面的代碼創建新的Firefox窗口:對前20,如果火狐 :XUL/Firefox:在插件加載時創建新的瀏覽器窗口
function createWindow (cb) {
const appHiddenWindow = Services.appShell.applicationProvidedHiddenWindow
, hidden = Services.appShell.hiddenDOMWindow;
// For definition of OpenBrowserWindow() see
// http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js
// Prior to Firefox 20 "private" option is silently ignored
let parent = appHiddenWindow ? hidden : RecentWindow.getMostRecentBrowserWindow()
, window = parent.OpenBrowserWindow({ private: true });
window.addEventListener("load", onWindowLoad);
return window;
function onWindowLoad (e) {
window.removeEventListener("load", onWindowLoad);
window.gBrowser.addEventListener("pageshow", onPageShow);
}
function onPageShow (e) {
dump("onPageShow\n");
try {
cb(window);
} catch (e) {}
}
}
對於一些未知的我原因,該代碼在不同情況下表現不同它在應用程序啓動時執行,onPageShow
回調從不觸發。我認爲這是因爲gBrowser
的selectedBrowser
只是不加載主頁,並在about:blank
加載後停止。爲什麼當我手動重新激活我的擴展(當Firefox已經加載時)時,它會在新窗口中加載主頁?
當它尚未將主頁加載到selectedBrowser
(在較新的Fx版本中)時出現問題:在這種情況下,它不會開始加載我指定的URL,而是繼續加載我的主頁。
那麼如何確定gBrowser
是否會加載主頁?爲什麼它在App啓動和附加重新激活時的行爲不同?
PS:對於上面的代碼工作必須做這些import
S和使用以下備用:
Cu.import("resource://gre/modules/Services.jsm");
try {
Cu.import("resource:///modules/RecentWindow.jsm");
} catch (e) { // Firefox prior to v20
var RecentWindow = {
getMostRecentBrowserWindow: function()
Services.wm.getMostRecentWindow("navigator:browser")
};
}
我在Mac OS上,如果它很重要。 – nilfalse
爲什麼不按照傳統的將偵聽器添加到窗口介體的路徑? – paa
在我的插件中,我需要我自己的(附加)窗口,它是由插件本身打開的。這個窗口會在後臺做一些工作。 在使用窗口介體的情況下,我將需要手動打開新窗口,我理解你是正確的嗎? – nilfalse