Как я могу запретить Firefox показывать боковую панель моего расширения при запуске?

Если моя собственная боковая панель остается открытой при закрытии Firefox, она снова отображается при запуске. Я считаю это нежелательным и предпочел бы, чтобы он оставался скрытым, пока не будет открыт вручную. Можно ли это остановить?

Я попытался добавить этот фрагмент кода в функцию инициализации моего расширения, чтобы закрыть боковую панель, если она появится:

toggleSidebar("mySidebar", false);

Это не работает слишком последовательно — кажется, игнорируется параметр false и просто переключается боковая панель! Когда он работает правильно, он имеет нежелательные побочные эффекты — мне нужно один раз открыть и закрыть боковую панель, прежде чем она покажет какой-либо контент. Странно, но я предполагаю, что часть взглядов Firefox на видимость боковой панели не синхронизирована.

Кажется, у других возникают те же проблемы на форумах MozillaZine.


person Mat    schedule 06.11.2009    source источник


Ответы (3)


Вы также можете добавить наблюдателя в процесс выключения и закрыть там боковую панель. У меня была та же проблема, что и у вас, и в итоге я пошел по этому пути, поскольку у нас уже был настроен наблюдатель для другой очистки.

Код выглядит так во время инициализации основного оверлея:

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

Надеюсь, это поможет.

person jbrugge    schedule 25.11.2009
comment
Хитрость! Мне было трудно заставить это работать (не в последнюю очередь из-за отсутствия отладки при завершении работы!), но в конце концов я обнаружил, что это работает для запроса на выход из приложения. Я обнаружил, что, хотя я все еще мог получить окно, в нем не было документа к моменту запуска quit-application-granted. - person Mat; 04.12.2009

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

person Nickolay    schedule 06.11.2009
comment
Прохладный. У меня были мысли о том, что флаг forceOpen не открывается/закрывается, но это подтвердилось. Предположим, что передача false не причинит мне вреда. Я чувствую, что мне нужно быть другим, потому что моя боковая панель имеет смысл только тогда, когда в строке URL есть действительный URL-адрес. Я мог бы просто отобразить общую боковую панель в этом случае, я думаю. Я попробую некоторые из этих идей. Спасибо. - person Mat; 07.11.2009

См. ответы на странице Как закрыть боковую панель в Firefox как его закрыть при выключении и на всякий случай при выключении.

person studgeek    schedule 29.08.2011