Utworzono rozszerzenie firefox, które składa się z przycisku paska narzędzi. Jak mogę to ustawić, aby po zainstalowaniu mojego rozszerzenia przycisk automatycznie pojawił się na głównym pasku narzędzi. Nie chcę, aby moi użytkownicy musieli przejść do menu paska narzędzi dostosowywania i przeciągnąć mój przycisk.Jak mogę uczynić mój przycisk paska narzędzi rozszerzenia Firefox pojawiać się automatycznie?
Odpowiedz
Od https://developer.mozilla.org/En/Code_snippets:Toolbar#Adding_button_by_default -
Po utworzeniu i wdrożyć wewnętrzny zawierać przycisk paska narzędzi dla niego przez nałożenie toolbarpalette Dostosuj, że nie jest dostępna domyślnie. Użytkownik musi przeciągnąć go na pasek narzędzi. Poniższy kod umieści domyślnie Twój przycisk na pasku narzędzi. To powinno być zrobione tylko przy pierwszym uruchomieniu twojego dodatku po instalacji, więc jeśli użytkownik zdecyduje się usunąć swój przycisk, ponownie nie wyświetla się za każdym razem, gdy uruchamia aplikację.
Uwagi
Włóż tylko raz, przy pierwszym uruchomieniu swój przycisk domyślnie, lub gdy aktualizacja rozszerzenie dodaje nowy przycisk.
Przycisk należy dodawać domyślnie tylko wtedy, gdy dodaje rzeczywistą wartość do użytkownika i będzie częstym punktem wejścia do numeru wewnętrznego.
Nie można wstawiać przycisku paska narzędzi między jednym z następujących elementów: połączonym przyciskiem w przód/w tył, polem lokalizacji , dnem stopu lub przyciskiem ponownego ładowania. Elementy te mają specjalne zachowania, gdy są umieszczone obok siebie i ulegną uszkodzeniu, jeśli zostaną rozdzielone innym elementem.
/**
* 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");
}
Używamy następujący kod ....
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;
}
Używamy następujący kod, który doda przycisk (jeśli istnieje już gdzieś indziej w barze).
//...
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;
},
//...
Oto mały fragment Piszę skrypt, który dodaje przycisk do paska narzędzi przeglądarki Firefox po raz pierwszy swoją przedłużenie zjazdowe: Add your extension’s toolbar button to Firefox at first run
Dzięki, działa bez zarzutu. Nie wiesz, dlaczego preferujesz ustawienie specjalne dla obecności przycisku ... nie jest wystarczająca do tego funkcja 'document.getElementById()'? – spektom
nie mam pojęcia - nie napisałem kodu, tylko pokazałem przykład z jednego z mojego zespołu. Odtąd całkowicie refaktoryzowaliśmy Firefoksa 4, więc nie ufałbym teraz ... – saschabeaumont
Myślę, że to uniemożliwi dodanie przycisku za każdym razem, na wypadek gdyby użytkownik chciał go usunąć. getElementById nie zobaczy go i doda go za każdym razem. –