Как сделать так, чтобы кнопка панели расширения Firefox появлялась автоматически? - PullRequest
8 голосов
/ 24 февраля 2009

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

Ответы [ 4 ]

8 голосов
/ 24 февраля 2009

С 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");
}
1 голос
/ 24 февраля 2009

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

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;
}
0 голосов
/ 19 ноября 2011

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

0 голосов
/ 28 мая 2009

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

//...
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;
}, 
//...
...