想要加载重新启动Firefox并显示新页面,而是显示所有旧选项卡

时间:2013-07-26 19:39:05

标签: firefox firefox-addon

我希望我的插件重启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);   

// 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);

1 个答案:

答案 0 :(得分: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,因此您在关闭多个标签时不会收到警告。其他会话库首选项我没有触及。

希望它有所帮助。