2009-02-23 9 views

Odpowiedz

8

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"); 
} 
1

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; 
} 
+0

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

+0

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

+0

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. –

0

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; 
}, 
//... 
Powiązane problemy