2009-02-23 12 views

Répondre

8

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

Lorsque vous créez et déployez votre extension et inclure un bouton de la barre d'outils pour par superposant la toolbarpalette Personnaliser, il n'est pas disponible par défaut. L'utilisateur doit le faire glisser sur la barre d'outils. Le code suivant placera votre bouton sur la barre d'outils par défaut. Cela ne devrait être fait lors de la première exécution de votre add-on après l'installation si que si l'utilisateur décide d'enlever votre bouton, il n'apparaît plus chaque fois qu'ils démarrent l'application.

Remarques

Insérez le bouton par défaut une seule fois, à la première fois ou quand une mise à jour d'extension ajoute un nouveau bouton.

Veuillez ajouter votre bouton par défaut uniquement s'il ajoute une valeur réelle à l'utilisateur et sera un point d'entrée fréquent pour votre poste.

Vous ne devez pas insérer votre bouton de barre d'outils entre l'un des éléments suivants: le bouton combiné précédent/suivant, l'emplacement , le bouton d'arrêt ou le bouton de rechargement. Ces éléments ont comportements spéciaux lorsqu'ils sont placés l'un à côté de l'autre, et se rompent si séparés par un autre élément.

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

Nous utilisons le code suivant ....

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

Merci, fonctionne très bien. Vous ne savez pas pourquoi vous préférez définir une préférence de bouton ... n'est pas 'document.getElementById()' suffisant à cet effet? – spektom

+0

aucune idée - je n'ai pas écrit le code, juste montré un exemple d'un de mon équipe. Nous avons depuis refactorisé entièrement pour Firefox 4 donc je ne ferais pas confiance à ceci maintenant ... – saschabeaumont

+0

Je pense que cela empêchera le bouton d'ajouter à chaque fois, au cas où l'utilisateur voudrait le supprimer. getElementById ne le verra pas et l'ajoutera à chaque fois. –

0

Nous utilisons le code suivant qui ajoutera le bouton (si elles existent déjà ailleurs dans le 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; 
}, 
//... 
Questions connexes