2009-02-23 21 views
8

Ho creato un'estensione firefox che consiste in un pulsante della barra degli strumenti. Come posso configurarlo in modo che quando viene installata l'estensione, il pulsante venga visualizzato automaticamente nella barra degli strumenti principale. Non voglio che i miei utenti debbano accedere al menu Personalizza barra degli strumenti e trascinare il mio pulsante sopra.Come posso far apparire automaticamente il mio pulsante della barra degli strumenti di estensione di Firefox?

risposta

8

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

Quando si crea e si distribuisce la propria estensione e includere un pulsante della barra degli strumenti per esso sovrapponendo la toolbarpalette Personalizza, non è disponibile per impostazione predefinita. L'utente deve trascinarlo sulla barra degli strumenti. Il seguente codice posizionerà il pulsante sulla barra degli strumenti per impostazione predefinita. Questo dovrebbe essere fatto solo alla prima esecuzione del componente aggiuntivo dopo l'installazione, quindi che se l'utente decide di rimuovere il pulsante, non viene visualizzato nuovamente ogni volta che avvia l'applicazione.

Note

Inserire il pulsante per impostazione predefinita solo una volta, in prima esecuzione, o quando un aggiornamento estensione aggiunge un nuovo pulsante.

Si prega di aggiungere il proprio pulsante di default solo se aggiunge valore reale all'utente e sarà un frequente punto di accesso al proprio interno.

Non è necessario inserire il pulsante della barra degli strumenti tra uno degli elementi seguenti: il pulsante Indietro/Avanti combinato, la posizione , il pulsante stop o il pulsante di ricarica. Questi elementi hanno comportamenti speciali posizionati l'uno accanto all'altro e si interromperanno se separati da un altro elemento.

/** 
* 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

Stiamo utilizzando il seguente codice ....

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

Grazie, funziona bene. Non sei sicuro del motivo per cui sei una preferenza speciale per la presenza dei pulsanti ... non è sufficiente 'document.getElementById()' per questo scopo? – spektom

+0

non ho idea - non ho scritto il codice, ho appena mostrato un esempio da uno dei miei team. Da allora abbiamo refactored interamente per Firefox 4 quindi non mi fiderei di questo ora ... – saschabeaumont

+0

Penso che impedirà il pulsante di aggiungere ogni volta, nel caso in cui l'utente vuole rimuoverlo. getElementById non lo vedrà e lo aggiungerà ogni volta. –

0

Stiamo utilizzando il seguente codice che aggiungerà il bottone (se esiste già da qualche altra parte nel bar).

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