2009-02-23 17 views
8

He creado una extensión de Firefox que consiste en un botón de la barra de herramientas. ¿Cómo puedo configurarlo para que cuando esté instalada mi extensión, el botón aparezca automáticamente en la barra de herramientas principal? No quiero que mis usuarios tengan que ir al menú de la barra de herramientas de personalización y arrastrar mi botón.¿Cómo puedo hacer que mi botón de la barra de herramientas de la extensión de Firefox aparezca automáticamente?

Respuesta

8

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

Al crear e implementar su extensión e incluir un botón de la barra de herramientas para ello mediante la superposición de la toolbarpalette Personalizar, no está disponible por defecto. El usuario tiene que arrastrarlo a la barra de herramientas. El siguiente código colocará su botón en la barra de herramientas de forma predeterminada. Esto debería solo hacerse en la primera ejecución de su complemento después de la instalación, así que que si el usuario decide quitar su botón, no aparece de nuevo cada vez que inician la aplicación.

Notas

Inserte el botón de forma predeterminada sólo una vez, en la primera carrera, o cuando una actualización extensión agrega un nuevo botón.

Por favor, solo agregue su botón por defecto si agrega valor real al usuario y será un punto de entrada frecuente a su extensión.

No debe insertar el botón de la barra de herramientas entre ninguno de los siguientes elementos: el botón combinado retroceder/avanzar, la barra de ubicación , el botón de parada o el botón de recarga. Estos elementos tienen comportamientos especiales cuando se colocan uno al lado del otro, y se romperán si separados por otro 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

Estamos utilizando el siguiente código ....

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

Gracias, funciona bien. No estoy seguro de por qué tiene preferencia de configuración especial para la presencia del botón ... ¿no es suficiente 'document.getElementById()' para este propósito? – spektom

+0

no tengo idea - No escribí el código, solo le mostré un ejemplo de uno de mi equipo. Desde entonces hemos rediseñado completamente para Firefox 4, por lo que no confiaría en esto ahora ... – saschabeaumont

+0

Creo que eso evitará que el botón se agregue cada vez, en caso de que el usuario quiera eliminarlo. getElementById no lo verá y lo agregará todo el tiempo. –

0

Estamos utilizando el siguiente código que añadir el botón (si ya existen en otro lugar en el 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; 
}, 
//... 
Cuestiones relacionadas