Доброго дня, есть вопрос по поводу addon-bar, появившемуся в 4й версии. Долгое время не доходили руки обновить одно локальное расширение, совместимость по большому счёту осталось, но пользователи хотят, чтоб кнопка расширения могла перемещаться в нужное место по панели расширений, как это сделано в расширениях для 4.х и более версий.
Внимание вопрос, как с минимальными изменениями переделать расширение?
Отягощающие обстоятельства - кнопка на тулбаре представляет с собой две колонки: в одной картинка, в другой текст.
Вот так выглядит кусок из XUL, касающийся тулбара:

Выделить код

Код:

<statusbar id="status-bar">
        <statusbarpanel id="BlablaStatusPanel"
                        insertbefore="resizerBottomRight"
                        context="BlablaStatusPopupMenu"
                        tooltip="BlablaStatusTooltip"
                        onclick="Blabla.StatusClick(event);">
            <grid>
                <rows>
                    <row />
                </rows>
                <columns>
                    <column flex="1">
                        <image id="BlablaStatusIcon" src="chrome://blabla/skin/icon_disabled.png"/>
                    </column>
                    <column flex="1">
                        <label id="BlablaLabel" value="0.00" hidden="true" />
                    </column>
                </columns>
            </grid>
        </statusbarpanel>
    </statusbar>

Как правильно это адаптировать под версию 4.х и так, чтоб можно было перетаскивать по панельке?
Заранее спасибо.
(firefox-овые расширения ранее почти не ковыряла, но кое-что умею и быстро учусь)

Как-то так:

Выделить код

Код:

<toolbarpalette id="BrowserToolbarPalette">
    <toolbaritem
        id="BlablaStatusPanel"
        context="BlablaStatusPopupMenu"
        tooltip="BlablaStatusTooltip"
        onclick="Blabla.StatusClick(event);">
        <grid>
            ...
        </grid>
    </toolbaritem>
</toolbarpalette>

https://developer.mozilla.org/en/XUL/toolbaritem

Тема перенесена из форума «Firefox» в форум «Разработка».

Infocatcher , Спасибо большое. Заработало. Вроде делала тоже самое, но видимо перемудрила.
Ещё вопрос, теперь по умолчанию тулбар в панели расширений не появляется, его надо принудительно вытаскивать из вид - панели инструментов - настроить (и перетаскивать руками на панель).
Но в расширениях типа noscript тулбар появляется сразу без манипуляций. Как его по умолчанию заставить быть на панельке?

И какой MIME-type должен отдавать сервер на .xpi-файлик? Чтобы он сразу открывался в фф, а не требовал сначала сохранить, если это возможно.

tuarisa пишет

Но в расширениях типа noscript тулбар появляется сразу без манипуляций. Как его по умолчанию заставить быть на панельке?

Ну, можно посмотреть, что делает NoScript. =)
https://developer.mozilla.org/en/Code_s … by_default

tuarisa пишет

И какой MIME-type должен отдавать сервер на .xpi-файлик?

application/x-xpinstall

11-07-2011 15:05:31
\chrome\noscript.jar\content\noscript\Main.js

  ensureUIVisibility: function() {

Выделить код

Код:

ensureUIVisibility: function() {
    const window =  DOM.mostRecentBrowserWindow;
    try {
      const document = window.document;
      const addonBar = document.getElementById("addon-bar");
      if (!addonBar) return false;
      
      const tbbId = "noscript-tbb";
      let tbb = document.getElementById(tbbId);
      if (tbb) return false;
      
      let navBar = document.getElementById("nav-bar");
      
      let [bar, refId] =
        addonBar.collapsed && navBar && !navBar.collapsed || !this.getPref("statusIcon", true)
        ? [navBar, "urlbar-container"]
        : [addonBar, "status-bar"];
      
      set = bar.currentSet.split(/\s*,\s*/);
      if (set.indexOf(tbbId) > -1) return false;
      
      set.splice(set.indexOf(refId), 0, tbbId);
      
      bar.setAttribute("currentset", bar.currentSet = set.join(","));
      document.persist(bar.id, "currentset");
      try {
        window.BrowserToolboxCustomizeDone(true);
      } catch (e) {}
      try {
        window.noscriptOverlay.initPopups();
      } catch(e) {}
      return true;
    } catch(e) {
      this.dump(e);
      return false;
    }
  },

Я заюзала то, что было по первой ссылке. Но по-моему это немного не то, чего мне хотелось. Мне бы хотелось при первом запуске назначить ему положение, а о дальнейшем его расположении озадачить пользователя. Чтоб при каждом новом запуске он не помещался туда, куда, куда совался при первом запуске.

Я попробовала сделать с детектом первого запуска, как здесь http://stackoverflow.com/questions/4978188/how-do-i-detect-a-first-run-in-firefox-a-addon , но по-моему:
pref("extensions.blabla@ololo.firstrun", true);
не работает, файлик лежит в defaults\preferences.

tuarisa пишет

но по-моему:
pref("extensions.blabla@ololo.firstrun", true);
не работает, файлик лежит в defaults\preferences.

Подойдет любая настройка – надо проверять значение перед добавлением кнопки и переключать в состояние «кнопка добавлена» после.