我正在开发引导式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