我正在开发自举的Firefox插件。在我的startup
函数中,我正在构建对象的新实例,它使用以下代码创建新的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) {}
}
}
对于某些未知的原因,此代码在不同情况下的行为有所不同:
如果在应用启动时执行,则在20之前的Firefox上,onPageShow
回调永远不会触发。我认为这是因为gBrowser
的{{1}}只是没有加载主页并在selectedBrowser
加载后停止。当我手动重新激活扩展时(为什么已经加载Firefox)时,为什么它会在新窗口中加载主页?
在将主页加载到about:blank
(在较新的Fx版本中)时出现问题:在这种情况下,它不会开始加载由我指定的网址,而是继续加载我的主页。
那么如何确定selectedBrowser
是否要加载主页?为什么它在App启动时和addon重新激活时表现不同?
PS:要使上述代码生效,必须执行以下gBrowser
并使用以下后备:
import
答案 0 :(得分:0)
在我的一些假设中,我似乎错了。我不必等到pageshow
事件。经过长时间的研究,我发现了bug。根据它,有一个观察员通知browser-delayed-startup-finished
足以开始做我必须对window
做的事情。