Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止Firefox显示我的扩展名';启动时的侧边栏?_Javascript_Firefox_Firefox Addon_Sidebar_Firefox Sidebar - Fatal编程技术网

Javascript 如何防止Firefox显示我的扩展名';启动时的侧边栏?

Javascript 如何防止Firefox显示我的扩展名';启动时的侧边栏?,javascript,firefox,firefox-addon,sidebar,firefox-sidebar,Javascript,Firefox,Firefox Addon,Sidebar,Firefox Sidebar,如果我自己的侧边栏在Firefox关闭时保持打开状态,则它会在启动时再次显示。我发现这是不可取的,宁愿它保持隐藏,直到手动打开。有可能阻止这种情况发生吗? 我尝试将这段代码添加到扩展的初始化函数中,以便在出现边栏时关闭边栏: toggleSidebar("mySidebar", false); 这似乎没有太多的工作太一致-它似乎忽略了假参数,只是切换侧栏!当它工作正常时,它会产生不必要的副作用-我需要打开和关闭侧边栏一次,然后它才会显示任何内容。奇怪,但我认为Firefox对侧边栏可见性的部分

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

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

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

似乎其他人也有同样的问题。

切换边栏(“mySidebar”,false)不起作用,因为第二个参数表示“强制打开”,而不是打开/关闭标志

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

以下是Firefox中启动时打开侧栏的代码:

(稍后访问时,这些行可能会关闭-这是指向源代码最新版本的链接)

下面是
sidebarcommand
属性持久化的地方:

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

  • 在浏览器关闭之前关闭侧边栏
  • 欺骗BrowserShutdown以保持正确的属性(对应于“侧边栏未打开”的情况)
  • 或者在BrowserShutdown之后,用您需要的值覆盖持久化的值

如果您提出了有效的解决方案,请与其他人分享,最好是在MDC上:

您还可以在关机过程中添加一个观察者,并关闭侧栏。我和你有同样的问题,并最终走上了这条路线,因为我们已经设置了一个观察员来做一些其他清理工作

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

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

希望这能有所帮助。

有关如何在关机时关闭它以及万一在关机时关闭它的答案,请参阅。

酷。我曾想过forceOpen标志不能打开/关闭,但这证实了这一点。假定传递错误不会对我造成伤害。我觉得我需要与众不同,因为我的侧边栏只有在URL栏中有一个有效的URL时才有意义。我想,在这种情况下,我可以只显示一个通用的侧边栏。我将尝试其中一些想法。谢谢,狡猾!我很难让它工作(尤其是由于关机时缺少调试!),但最终发现它适用于请求退出的应用程序。我发现,虽然我仍然可以得到窗口,但在退出应用程序时它没有文档。
1373 function BrowserShutdown()
...
1426   if (!enumerator.hasMoreElements()) {
1427     document.persist("sidebar-box", "sidebarcommand");
    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);