Как сделать так, чтобы кнопка панели инструментов расширения Firefox отображалась автоматически?

Я создал расширение Firefox, которое состоит из кнопки панели инструментов. Как я могу настроить его так, чтобы при установке моего расширения кнопка автоматически появлялась на главной панели инструментов. Я не хочу, чтобы мои пользователи переходили в меню настройки панели инструментов и перетаскивали мою кнопку.

Ответов (4)

Вот небольшой фрагмент сценария, который я пишу, который добавляет кнопку на панель инструментов Firefox при первом запуске вашего расширения: Добавьте кнопку панели инструментов вашего расширения в Firefox при первом запуске

Из https://developer.mozilla.org/En/Code_snippets:Toolbar#Adding_button_by_default -

Когда вы создаете и развертываете свое расширение и добавляете для него кнопку на панели инструментов, накладывая палитру «Настроить панель инструментов», по умолчанию оно недоступно. Пользователь должен перетащить его на панель инструментов. Следующий код по умолчанию поместит вашу кнопку на панель инструментов. Это следует делать только при первом запуске надстройки после установки, чтобы, если пользователь решит удалить вашу кнопку, она больше не появлялась при каждом запуске приложения.

Примечания

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

По умолчанию добавляйте кнопку только в том случае, если она приносит пользу пользователю и будет частой точкой входа в ваше расширение.

Вы не должны вставлять кнопку панели инструментов между любыми из следующих элементов: комбинированной кнопкой назад / вперед, строкой местоположения, кнопкой остановки или кнопкой перезагрузки. Эти элементы имеют особое поведение при размещении рядом друг с другом и ломаются, если их разделяет другой элемент.

/**
 * Installs the toolbar button with the given ID into the given
 * toolbar, if it is not already present in the document.
 *
 * @param {string} toolbarId The ID of the toolbar to install to.
 * @param {string} id The ID of the button to install.
 * @param {string} afterId The ID of the element to insert after. @optional
 */
function installButton(toolbarId, id, afterId) {
    if (!document.getElementById(id)) {
        var toolbar = document.getElementById(toolbarId);

        // If no afterId is given, then append the item to the toolbar
        var before = null;
        if (afterId) {
            let elem = document.getElementById(afterId);
            if (elem && elem.parentNode == toolbar)
                before = elem.nextElementSibling;
        }

        toolbar.insertItem(id, before);
        toolbar.setAttribute("currentset", toolbar.currentSet);
        document.persist(toolbar.id, "currentset");

        if (toolbarId == "addon-bar")
            toolbar.collapsed = false;
    }
}

if (firstRun) {
    installButton("nav-bar", "my-extension-navbar-button");
    // The "addon-bar" is available since Firefox 4
    installButton("addon-bar", "my-extension-addon-bar-button");
}

Мы используем следующий код ....

function init() {

    // .... 

    var navbar = document.getElementById("nav-bar");
    if ((myExtensionShared.checkMyBtnInstalled() == false) &&
        (navbar != null && document.getElementById("myExtension-button") == null)) {
        var newset;
            if (navbar.getAttribute('currentset') && 
              navbar.getAttribute('currentset').indexOf('myExtension-button') == -1) {

                navbar.insertItem ('myExtension-button', null, null, false);
                newset = navbar.getAttribute('currentset') + ',myExtension-button';
                navbar.setAttribute('currentset', newset);
                document.persist('nav-bar', 'currentset');
            }
            else if (!navbar.getAttribute('currentset')) {

                navbar.insertItem ('myExtension-button', null, null, false);
                newset=navbar.getAttribute('defaultset') + ',myExtension-button';
                navbar.setAttribute('currentset', newset);
                document.persist('nav-bar', 'currentset');
            }

    }

    // .... 

}



myExtensionShared.prototype.checkMyBtnInstalled = function() {
    var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                                       .getService(Components.interfaces.nsIPrefBranch);
    var btnInstalled = false;
    if (prefs.prefHasUserValue("extensions.myExtension.myBtnInstalled")) {
        btnInstalled = prefs.getBoolPref("extensions.myExtension.myBtnInstalled");
    }
    if (!btnInstalled) {
        prefs.setBoolPref("extensions.myExtension.myBtnInstalled", true);
    }
    return btnInstalled;
}

Мы используем следующий код, который добавит кнопку (если она уже существует где-то еще на панели).

//...
appendButtonInToolbar:function(buttonId, toolbarId) {
    var toolbar = document.getElementById(toolbarId);
    var button = document.getElementById(buttonId);
    if(button) {
        var parentBar = button.parentNode;          
        if(parentBar && parentBar != toolbar) {
            var newset = this.removeButtonFromToolbarCurrentSet(parentBar,buttonId);              
        }
        toolbar.appendChild(button);
    }else{          
        toolbar.insertItem(buttonId);
    }

    this.appendButtonInToolbarCurrentSet(toolbar,buttonId);
},

appendButtonInToolbarCurrentSet:function(toolbar, buttonId) {
    var oldset = toolbar.getAttribute("currentset");
    var newset = "";
    if(oldset && oldset!="") {
        newset = oldset + ",";
    }        
    newset += buttonId;        
    toolbar.setAttribute("currentset", newset);
    document.persist(toolbar.id,"currentset");
    return newset;
},


removeButtonFromToolbarCurrentSet:function(toolbar, buttonId) {
    var oldset = toolbar.getAttribute("currentset");
    if(!oldset || oldset=="" || oldset.indexOf(buttonId) == -1) return oldset;
    var reg = new RegExp(buttonId+",?", "gi");        
    var newset = oldset.replace(reg,"");
    if (newset.charAt(newset.length-1) == ",") {
       newset = newset.substring(0, newset.length - 1);
    }

    toolbar.setAttribute("currentset", newset);
    document.persist(toolbar.id,"currentset");
    return newset;
}, 
//...