0

我希望我的插件重新启动 Firefox,并在重新启动时显示一个预定义的网页。

当我通过 重启浏览器时nsIAppStartup.quit(),我一直在查看的所有选项卡将在重启后重新打开。我试图通过在重新启动之前关闭所有选项卡来手动解决这个问题(请参见下面的代码),但我发现虽然我可以直观地确认所有选项卡都已关闭,但它们将在重新启动后再次出现。

我假设某些会话恢复机制在重新启动后重新创建它们。我发现了一些关于“SessionStore”(、、等)的偏好browser.sessionstore.max_tabs_undobrowser.sessionstore.resume_from_crash但切换它们似乎并不能帮助我解决这个问题。

我应该如何确保重新启动后关闭旧选项卡?谢谢!

// get gBrowser reference
var mainWindow = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser");
var gBrowser = mainWindow.gBrowser;

// build a collection of tabs to close
var tabsToClose = [];
for( var i = 0; i < gBrowser.mTabContainer.childNodes.length - 1; i++ ){
    tabsToClose.push( gBrowser.mTabContainer.childNodes[i] );
}

// Open homepage in new tab
gBrowser.addTab(DEFAULT_HOMEPAGE);

// Close all tabs except for homepage
for( var i = 0; i < tabsToClose.length; i++ ){      
    gBrowser.removeTab( tabsToClose[i] );
}

// restart browser
Cc["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup).quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);   

4

1 回答 1

1

我稍微更改了您的代码并提出了以下解决方案:

var Cc = Components.classes;
var Ci = Components.interfaces;

var pref = Cc["@mozilla.org/preferences-service;1"]
    .getService(Components.interfaces.nsIPrefService);
pref.setBoolPref("browser.tabs.warnOnCloseOtherTabs",false);

var mainWindow = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser");
var gBrowser = mainWindow.gBrowser;

var newTab = gBrowser.addTab("www.google.com");

// Easier solution than having two loops to identify the open tabs
gBrowser.removeAllTabsBut(newTab);

var nsIAppStartup = Ci.nsIAppStartup; // You were missing this part on your question
Cc["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup).quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);

您需要更改的首选项是browser.tabs.warnOnCloseOtherTabs关闭多个选项卡时不会收到警告。我没有触及的其他会话存储首选项。

希望能帮助到你。

于 2013-07-27T21:39:52.467 回答