我希望我的插件重新启动Firefox,并在重新启动时显示一个预定义的网页。
当我通过nsIAppStartup.quit()重新启动浏览器时,我所查看的所有选项卡都将在重新启动后重新打开。我试图通过重新启动之前关闭所有选项卡来手动处理这个问题(请参阅下面的代码),但我发现,虽然我可以直观地确认所有选项卡都关闭了,但在重新启动之后,它们将再次出现。
我假设某些会话恢复机制在重新启动后会重新创建它们。我发现了一些关于"SessionStore“(browser.sessionstore.max_tabs_undo、browser.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);
发布于 2013-07-27 21:39:52
我稍微修改了您的代码,并提出了以下解决方案:
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,因此在关闭多个选项卡时不会收到警告。我没碰过的另一家芝士店。
希望能帮上忙。
https://stackoverflow.com/questions/17889652
复制相似问题