FireFox Toolbar Prefwindow unload / acceptdialog Событие для обновления панели инструментов - PullRequest
0 голосов
/ 04 января 2011

Я пытаюсь разработать панель инструментов Firefox;)

так что моя структура

alt text

В файле options.xul есть окно PrefWindow, которое я открываю над

  <toolbarbutton oncommand="esbTb_OpenPreferences()"/>
    function esbTb_OpenPreferences() {
 window.openDialog("chrome://Toolbar/content/options.xul", "einstellungen", "chrome,titlebar,toolbar,centerscreen,modal", this);}

поэтому в моих настройках я могу установить некоторые флажки, которые указывают, какие ссылки представлены на моей панели инструментов. Поэтому, когда окно настроек закрыто или нажата кнопка «ОК», я хочу вызвать событие или функцию, которая обновляет через DOM мою панель инструментов.

Так что это функция, которая вызывается при загрузке панели инструментов. Он устанавливает видимость ссылок на панели инструментов.

 function esbTB_LoadMenue() {
  var MenuItemNews = document.getElementById("esbTb_rss_reader");
  var MenuItemEservice = document.getElementById("esbTb_estv");

  if (!(prefManager.getBoolPref("extensions.esbtoolbar.ShowNews"))) {
    MenuItemNews.style.display = 'none';
  }

  if (!(prefManager.getBoolPref("extensions.esbtoolbar.ShowEservice"))) {
    MenuItemEservice.style.display = 'none';
  }
}

Поэтому я попытался подумать, например, добавить в диалог EventListener, который не работает ... так, как я пытался ... И я также попытался передать объект окна из корневого окна (панели инструментов), так как аргумент функции opendialog изменил функцию на эту.

    function esbTB_LoadMenue(RootWindow) {
  var MenuItemNews = RootWindow.getElementById("esbTb_rss_reader");
  var MenuItemEservice = RootWindow.getElementById("esbTb_estv");}

А затем попытался получить доступ к элементам через объект передачи обслуживания, но это также не изменило мою панель инструментов во время выполнения.

Итак, я пытаюсь изменить видимые ссылки на моей панели инструментов во время выполнения, и я не понимаю, как мне это сделать ...

заранее спасибо

------- ------- редактировать

    var prefManager = {
    prefs: null,

    start: function()
    {

        this.prefs = Components.classes["@mozilla.org/preferences-service;1"]
                .getService(Components.interfaces.nsIPrefService)
                .getBranch("extensions.esbtoolbar.");
        this.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
        this.prefs.addObserver("", this, false);

    },


    end: function()
    {
        this.prefs.removeObserver("", this);
    },


    observe: function(subject, topic, data)
    {
        if (topic != "nsPref:changed")
        {
            return;
        }
        //Stuff what is done when Prefs have changed
        esbTB_LoadMenue();

    },

    SetBoolPref: function(pref,value)
    {
        this.prefs.setBoolPref(pref,value);
    },

    GetBoolPref: function(pref)
    {
        this.prefs.getBoolPref(pref);
    }
}

Так что это моя реализация.

1 Ответ

1 голос
/ 05 января 2011

Хитрость заключается в том, чтобы слушать изменения предпочтений.Таким образом, ваша панель инструментов обновляется всякий раз, когда префы меняются - независимо от того, произошло ли это через ваше PrefWindow, about: config или какой-либо другой механизм.

В Toolbar.js вы делаете следующее

var esbTB_observe = function(subject, topic, data) {
   if (topic != "nsPref:changed") {
     return;
   }

   // find out which pref changed and do stuff
}

var esbTB_init = function() {
  prefs =
    Components.classes["@mozilla.org/preferences-service;1"]
              .getService(Components.interfaces.nsIPrefService)
              .getBranch("extensions.esbtoolbar.");
  prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
  prefs.addObserver("", esbTB_observe, false);
}

// Init addin after window loaded
window.addEventListener("load", esbTB_init, false);

Теперь, когда окно загружается, вызывается функция esbTB_init (), в которой наблюдатель на преф ветке «extensions.esbtoolbar».добавлен.Позже, когда преф в ветке изменяется, автоматически вызывается функция esbTB_observe ().

В esbTB_observe () вы должны прочитать значения ваших префов и настроить панель инструментов.

...