代码之家  ›  专栏  ›  技术社区  ›  Mat

我怎样才能防止firefox在启动时显示扩展的侧边栏?

  •  2
  • Mat  · 技术社区  · 15 年前

    如果我自己的侧边栏在Firefox关闭时保持打开状态,那么它会在启动时再次显示。我觉得这是不可取的,希望它一直隐藏,直到手动打开。有没有可能阻止这种情况的发生?

    我尝试将这段代码添加到扩展的初始化函数中,以便在侧边栏确实出现时关闭它:

    toggleSidebar("mySidebar", false);
    

    这似乎不是太一贯的工作-它似乎忽略了错误的参数,只是切换侧边栏!当它正常工作时,会产生不必要的副作用——我需要打开和关闭侧边栏一次,然后它才会显示任何内容。很奇怪,但我认为火狐的侧边栏的可见性部分已经不同步了。

    似乎其他人也有同样的麻烦 MozillaZine forums .

    3 回复  |  直到 13 年前
        1
  •  2
  •   jbrugge    15 年前

    您还可以向关闭进程添加一个观察者,并关闭侧栏。我和你有同样的问题,结果走了那个路线,因为我们已经安排了一个观察员来做其他的清理工作。

    在初始化主覆盖时,代码如下所示:

        var current = this;
        var quitObserver = {
       QueryInterface: function(aIID) {
          if (aIID.equals(Components.interfaces.nsIObserver) || aIID.equals(Components.interfaces.nsISupports)) {
             return this;
          }
          throw Components.results.NS_NOINTERFACE;
       },
       observe: function(aSubject,aTopic,aData ) {
          var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser");
          var sidebar  = mainWindow.document.getElementById("sidebar");
          if (sidebar.contentWindow.location.href == "chrome://daisy/content/sidebar.xul") {
             mainWindow.toggleSidebar('openDaisySidebar', false);
          }
       }
    };
    
    setTimeout(function() {
       var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser");
       var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
       observerService.addObserver(quitObserver,"quit-application-granted",false);
    },2000);
    

    希望有帮助。

        2
  •  0
  •   Nickolay    15 年前

    toggleSidebar("mySidebar", false); 不起作用,因为第二个参数表示“forceopen”而不是打开/关闭标志。

    正如有人在Mozillazine上回答的那样,这是因为Firefox只是在会话之间保留边栏状态。你确定你需要与众不同吗?

    以下是启动时打开边栏的firefox代码:

    http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js#999 (稍后访问时,行可能会关闭-这是指向源的最新版本的链接)

    1000     let box = document.getElementById("sidebar-box");
    1001     if (box.hasAttribute("sidebarcommand")) {
    

    这就是 sidebarcommand 属性得到持久化:

    http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js#1422

    1373 function BrowserShutdown()
    ...
    1426   if (!enumerator.hasMoreElements()) {
    1427     document.persist("sidebar-box", "sidebarcommand");
    

    我建议尝试一下:
    如果当前窗口是最后一个,并且侧边栏是打开的,

    • 或者先关闭侧边栏 BrowserShutdown (这是 registered as an unload handler for the window )
    • 欺骗browsershutdown以保持正确的属性(对应于“侧边栏未打开”的情况)
    • 或者在浏览器关闭后,用您需要的值覆盖持久化的值。

    如果您提出了工作解决方案,请与其他人共享,最好是在MDC上: https://developer.mozilla.org/En/Code_snippets/Sidebar

        3
  •  0
  •   Community CDub    7 年前

    答案见 How to close a sidebar in firefox 关于如何在关机时关闭它,以防万一,在关机时关闭它。