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
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");
}
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;
}
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;
},
//...
Aquí es un pequeño fragmento de secuencia de comandos que escribo que añade un botón a la barra de herramientas de Firefox por primera vez su extensión funciona: Add your extension’s toolbar button to Firefox at first run
- 1. Obtener la URL de la página actual de la extensión de la barra lateral de firefox
- 2. ¿Cómo hago para que aparezca el ícono de la Página de extensión de Chrome en la barra de direcciones?
- 3. iPhone: ocultar/mostrar la barra de herramientas
- 4. Cómo hacer que el botón del botón ToolBar se aplique a UserControls en la barra de herramientas
- 5. ¿Cómo puedo hacer que la página shift + barra espaciadora aparezca en Vim?
- 6. ¿Cómo crear un botón personalizado en la barra de herramientas de Netbeans?
- 7. ¿Cómo recibir notificaciones cuando la ventana se cierra en la extensión de Firefox?
- 8. API de extensión/gadget de Gmail: ¿cómo agregar un botón a la barra de herramientas de redacción?
- 9. ¿Cómo puedo hacer que una ventana de proceso hijo aparezca modal en mi proceso?
- 10. ¿Cómo hacer que un botón aparezca como si estuviera presionado?
- 11. ¿Cómo puedo hacer que el icono de mi aplicación de iPhone ad hoc aparezca en iTunes?
- 12. botones extjs en la apariencia de la barra de herramientas
- 13. ¿Cómo implementar mensajes que pasan en la extensión de Firefox?
- 14. Agregar botón a la barra de herramientas superior jqGrid
- 15. Cómo se evita que la consola aparezca automáticamente en Eclipse
- 16. ¿Cómo agrego botones a la barra de herramientas de Eclipse?
- 17. Cambiando el color de la barra de herramientas de MFMailComposeViewController
- 18. Cómo configurar la altura del botón de la barra de herramientas?
- 19. ¿cómo puedo hacer para que mi sitio web móvil de ancho fijo aparezca siempre "completamente ampliado"?
- 20. SintaxisHighlighter no muestra la barra de herramientas
- 21. ¿Cómo puedo abrir la página emergente de mi extensión de Chrome desde el script de contenido de la extensión?
- 22. Hacer una barra de herramientas del navegador?
- 23. Rieles: ¿Cómo hacer que el botón "button_to" aparezca en la misma línea (sin una nueva línea)?
- 24. Evite que photoswipe oculte la barra de herramientas
- 25. Cómo agrego manejador de protocolo a firefox desde la extensión
- 26. Agregar botón a la barra de título de la ventana
- 27. Winforms: ¿cómo puedo hacer que MessageBox aparezca centrado en MainForm?
- 28. Extensión de Firefox para cerrar la ventana de Firefox
- 29. ¿Cómo veo la barra de herramientas de depuración Django?
- 30. Obtener la versión del navegador desde la extensión de Firefox
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
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
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. –