8 Stimmen

Wie kann ich meine Firefox-Erweiterung automatisch in der Symbolleiste anzeigen lassen?

Ich habe eine Firefox-Erweiterung erstellt, die aus einer Schaltfläche in der Symbolleiste besteht. Wie kann ich es so einrichten, dass die Schaltfläche automatisch in der Hauptsymbolleiste erscheint, wenn meine Erweiterung installiert ist. Ich möchte nicht, dass meine Benutzer das Menü "Symbolleiste anpassen" aufrufen und meine Schaltfläche dorthin ziehen müssen.

8voto

stuartd Punkte 65785

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

Wenn Sie Ihre Erweiterung erstellen und bereitstellen und eine Schaltfläche für die Symbolleiste einfügen einfügen, indem Sie die Symbolleistenpalette anpassen, ist sie nicht standardmäßig nicht verfügbar. Der Benutzer muss sie auf die Symbolleiste ziehen. Der folgende Code platziert Ihre Schaltfläche standardmäßig in der Symbolleiste. Dies sollte nur bei der ersten Ausführung Ihres Add-ons nach der Installation erfolgen, damit damit die Schaltfläche nicht bei jedem Start der Anwendung erneut erscheint, wenn der Benutzer beschließt, sie zu entfernen. nicht jedes Mal wieder angezeigt wird, wenn er die Anwendung startet.

Anmerkungen

Fügen Sie Ihre Schaltfläche standardmäßig nur einmal ein, bei der ersten Ausführung oder wenn eine Aktualisierung der Erweiterung eine neue Schaltfläche hinzufügt.

Bitte fügen Sie Ihre Schaltfläche nur dann standardmäßig hinzu, wenn sie einen echten Mehrwert für den Benutzer darstellt und ein häufiger Einstiegspunkt zu Ihrer Erweiterung ist.

Sie dürfen Ihre Symbolleistenschaltfläche nicht zwischen einem der folgenden Elemente einfügen: der kombinierten Zurück/Vorwärts-Schaltfläche, der Positionsleiste Leiste, der Stopp-Schaltfläche oder der Schaltfläche "Neu laden". Diese Elemente haben besondere Verhaltensweisen, wenn sie nebeneinander platziert werden, und durch ein anderes Element getrennt werden.

/**
 * 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");
}

1voto

saschabeaumont Punkte 21770

Wir verwenden den folgenden Code....

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 Stimmen

Danke, funktioniert einwandfrei. Nicht sicher, warum Sie spezielle Einstellung Präferenz für die Schaltfläche Präsenz sind... ist nicht document.getElementById() für diesen Zweck ausreichen?

0 Stimmen

Keine Ahnung - ich habe den Code nicht geschrieben, sondern nur ein Beispiel aus einem meiner Teams gezeigt. Wir haben seit refactored vollständig für Firefox 4 so würde ich nicht vertrauen diese jetzt...

0 Stimmen

Ich denke, das wird verhindern, dass die Schaltfläche jedes Mal hinzufügen, für den Fall, dass der Benutzer es entfernen möchte. getElementById wird es nicht sehen und jedes Mal hinzufügen.

0voto

Cyno Punkte 133

Wir verwenden den folgenden Code, der die Schaltfläche anfügt (wenn sie bereits an anderer Stelle in der Leiste vorhanden ist).

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

0voto

Nicu Surdu Punkte 7743

Hier ist ein kleines Skript-Snippet, das ich geschrieben habe und das der Firefox-Symbolleiste eine Schaltfläche hinzufügt, wenn Ihre Erweiterung zum ersten Mal ausgeführt wird: Fügen Sie die Symbolleisten-Schaltfläche Ihrer Erweiterung bei der ersten Ausführung zu Firefox hinzu

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X