3

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

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

toggleSidebar("mySidebar", false);

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

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

4

3 回答 3

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

希望有帮助。

于 2009-11-25T21:42:57.820 回答
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(它被注册为窗口的卸载处理程序
  • 欺骗 BrowserShutdown 以保持正确的属性(对应于“侧边栏未打开”的情况)
  • 或在 BrowserShutdown 用您需要的值覆盖持久值之后。

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

于 2009-11-06T20:35:22.287 回答
0

请参阅如何在 Firefox中关闭侧边栏以了解如何在关机时关闭它,以防万一,在关机时关闭它。

于 2011-08-29T02:54:44.450 回答