如何防止Firefox在启动时显示扩展程序的侧边栏?

时间:2009-11-06 20:00:32

标签: javascript firefox firefox-addon sidebar firefox-sidebar

如果我的自己的侧边栏在Firefox关闭时保持打开状态,则会在启动时再次显示。我发现这是不受欢迎的,宁愿它一直隐藏,直到手动打开。是否有可能阻止这种情况发生?

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

toggleSidebar("mySidebar", false);

这看起来似乎不太一致 - 它似乎忽略了错误的参数,只是切换侧边栏!如果它确实正常工作它会产生不必要的副作用 - 我需要在显示任何内容之前打开和关闭侧边栏一次。很奇怪,但我认为Firefox对侧边栏可见性的看法已经不同步了。

似乎其他人在MozillaZine forums上遇到同样的问题。

3 个答案:

答案 0 :(得分:2)

您还可以向关机进程添加观察者,并关闭侧边栏。我遇到了和你一样的问题,最后走了那条路,因为我们已经设置了一个观察员进行其他清理。

在主叠加层初始化期间,代码如下所示:

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

希望有所帮助。

答案 1 :(得分:0)

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以保留正确的属性(对应于“侧边栏未打开”的情况)
  • 或在BrowserShutdown之后用您需要的值覆盖持久值。

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

答案 2 :(得分:0)

请参阅How to close a sidebar in firefox上的答案,了解如何在关机时关闭它,以防万一,在关机时。