2009-10-13 6 views
1

J'écris une extension Firefox. J'aimerais que mon code soit exécuté chaque fois qu'un nouvel onglet s'ouvre.Comment ajouter un événement 'TabOpen' à toutes les fenêtres d'une extension Firefox?

J'ai essayé ceci:

for (var i=0; i<Application.windows.length; i++) { 
    var w = Application.windows[i]; 
    w.events.addListener("TabOpen", function(event){ 
    alert('tab #'+w.activeTab.index +' opened'); 
    }); 
} 

Il ne fonctionne pas correctement si windows.length> 1. Par exemple, nous avons deux fenêtres. J'ouvre un nouvel onglet et l'événement se déclenche 2 fois, pour chaque fenêtre. Je veux seulement un appel d'événement pour la fenêtre actuelle.

Répondre

2

sans carburant: https://developer.mozilla.org/en/Code_snippets/Tabbed_browser#Notification_when_a_tab_is_added_or_removed. J'aime mieux que d'utiliser Application.activeWindow, puisque de regarder le code il n'y a aucune garantie activeWindow se réfère toujours à la même fenêtre que votre code est en cours d'exécution. (S'ils sont différents, vous allez vous retrouver avec des problèmes étranges pour reproduire les problèmes).

La raison pour laquelle votre code d'origine n'a pas fonctionné est que vous avez vraisemblablement placé votre code dans un script pour le superposer à la fenêtre principale du navigateur. Ce code est exécuté dans chaque instance de la fenêtre du navigateur que l'utilisateur ouvre. Ainsi, lorsque vous ouvrez la seconde fenêtre, la boucle s'exécute à nouveau et ajoute un second écouteur pour la 1ère fenêtre et le premier (seulement) écouteur à la 2ème fenêtre.

1

réponse à ma propre question:

window.addEventListener('load', function(){ 

    var w = Application.activeWindow; 
    w.events.addListener("TabOpen", function(event){ 
    alert('tab #'+w.activeTab.index +' opened'); 
    }); 

}, false); 
0

aucun moyen que je na pas que fonctionne i akways attaché à gBrowser, voici comment je le fais: https://gist.github.com/Noitidart/8673632

où j'attache domContentLoad i joindre également TabOpen

+0

Si vous avez une nouvelle question, s'il vous plaît demander en cliquant sur le bouton [Poser une question] (http://stackoverflow.com/questions/ask). Incluez un lien vers cette question si cela aide à fournir un contexte. – rene

+0

ok thx man im nouveau à empiler – Noitidart

Questions connexes