2015-04-29 10 views
5

Ich muss ein Firefox-Addon hinzufügen eine Schaltfläche hinzufügen, um die Adressleiste, wenn die Registerkarte in einer bestimmten Domäne ist.Wie ein Addon/eine Erweiterung ein Symbol/einen Button zur Firefox-Adressleiste hinzufügen, wenn der Tab in einer bestimmten Domain geöffnet ist?

Ich habe es geschafft, das Element navbar-icons für das aktuelle Fenster zu finden und ein untergeordnetes Element hinzuzufügen, aber das Symbol zu allen Registerkarten für dieses Fenster hinzuzufügen, anstatt nur das relevante Register. Wie kann ich das machen?

EDIT: Sorry ich war auf Handy und nicht den Code enthalten.

Was ich bisher:

var windowsUtils = require('sdk/window/utils'); 

var loadButton = function(doc, urlBtnClick) { 
    var urlBarIcons = doc.getElementById('urlbar-icons'); 

    var btn = doc.createElement('toolbarbutton'); 
    btn.setAttribute('id', 'button-icon'); 
    btn.setAttribute('image', self.data.url('./images/icon16.png')); 
    btn.click(onButtonClick); 
    urlBarIcons.appendChild(btn); 
    return btn; 
} 

var onButtonClick = function(event) { 
    console.log('i was clicked'); 
} 

wenn ich die oben rufen i fügen Sie ein Symbol/Taste, um alle Register anstelle des aktuellen aktiven.

+1

Dieses Demo-Addon tut genau das, aber es nicht e10s so seine alte (1 Jahr alt) und braucht Verbesserung, aber es sollte funktionieren: https://gist.github.com/Noitidart/9266173 Ich habe es gerade installiert Firefox Beta-Kanal und es funktioniert. Es fügt der Leiste auf der Nicht-Newtab-Seite einen orangefarbenen Würfel hinzu und wenn sich der Benutzerfokus nicht in der URL befindet. – Noitidart

+0

Welchen Code haben Sie schon ausprobiert? Bitte * bearbeite * die Frage *, um deinen Quellcode anzugeben. Bitte lesen Sie [Welche Themen kann ich hier fragen?] (Http://stackoverflow.com/help/on-topic), [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how -zu-fragen) und [Wie man ein minimales, vollständiges und überprüfbares Beispiel erstellt] (http://stackoverflow.com/help/mcve). Wenn wir versuchen zu verifizieren, dass unsere Lösung für Sie funktioniert, ist es viel einfacher, dies zu tun, wenn wir Ihren Code haben, von dem aus wir beginnen müssen, anstatt alles aufstellen zu müssen. Ohne einen solchen Code gibt es weniger Anreiz, eine Antwort für Sie zu finden. – Makyen

+0

@Noitidart danke, aber sehr sehr neu zu sein, es ist ein bisschen verwirrend. Da ich das Add-on-SDK verwende und das Bootstrapping automatisch ausgeführt wird, wie kann ich diese Bootstrap-Datei verwenden? Gibt es einen leichteren Weg? – tiagosilva

Antwort

0

Dies ist eine Hacky Implementierung nur die Registerkarten des SDK und Taste apis:

let { ActionButton } = require("sdk/ui/button/action"); 
let tabs = require('sdk/tabs'); 
let soButton; 

tabs.on('activate', (tab) => { 
    if (/^http[s]*\:\/\/stackoverflow.com/.test(tab.url)) { 
    soButton = ActionButton({ 
     id: "so-button", 
     label: "This is StackOverflow!!", 
     icon: { 
     "16": "chrome://mozapps/skin/extensions/extensionGeneric.png", 
     "32": "chrome://mozapps/skin/extensions/extensionGeneric.png" 
     }, 
     onClick: function(state) { 
     console.log("clicked"); 
     } 
    }); 
    } else { 
    if (soButton && typeof (soButton.destroy === 'Function')) { 
     soButton.destroy(); 
    } 
    } 
}); 

Es fühlt sich klugey zu erstellen/zerstören die Taste jedes Mal, wenn wir Registerkarten wechseln, aber der Benutzer Erfahrung ist genau das, was Sie wollen. Ein ähnlicher und vielleicht besser unterstützter Ansatz könnte statt dessen nur disable the button sein.

+0

Aber das würde erstellen/zerstören eine Tab-Taste, ich wollte eine Adressleiste Symbol/Schaltfläche hinzufügen, wie rss Feed-Erkennung Addon tut: http://imgur.com/7gum4uD Ich glaube, ich könnte die gleiche Strategie verwenden zerstören/erstellen das Symbol bei jedem Tab Schalter wie Sie, danke – tiagosilva

+0

Ah, ok. Ja - Sie könnten ungefähr die gleiche Strategie verwenden. – canuckistani