Как добавить событие «TabOpen» ко всем окнам в расширении Firefox?

Я пишу расширение Firefox. Я хотел бы, чтобы мой код выполнялся всякий раз, когда открывается новая вкладка.

Я пробовал это:

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');
  });
} 

Это не работает правильно, если windows.length> 1. Например, у нас есть два окна. Я открываю новую вкладку и запускаю события 2 раза для каждого окна. Я хочу только один вызов события для текущего окна.

13.10.2009 08:14:14
3 ОТВЕТА
РЕШЕНИЕ

Без ТОПЛИВА: https://developer.mozilla.org/ru/Code_snippets/Tabbed_browser#Notification_when_a_tab_is_added_or_removed . Мне это нравится больше, чем использование Application.activeWindow, поскольку при взгляде на код нет гарантии, что он activeWindowвсегда ссылается на то же окно, в котором выполняется ваш код. (Если они разные, у вас возникнут странные проблемы с воспроизведением).

Причина, по которой исходный код не работал, заключается в том, что вы, вероятно, помещаете свой код в сценарий для наложения на главное окно браузера. Такой код выполняется в каждом экземпляре окна браузера, которое открывает пользователь. Поэтому, когда вы открываете второе окно, цикл выполняется снова и добавляет второго прослушивателя для 1-го окна и первого (единственного) прослушивателя во 2-е окно.

2
14.10.2009 08:00:11

Ответьте на мой собственный вопрос:

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

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

}, false);
1
13.10.2009 16:49:58

ни в коем случае я не работал, я прикрепил его к gbrowser, вот как я это делаю: https://gist.github.com/Noitidart/8673632

где я прикрепляю domContentLoad я также прикрепляю TabOpen

0
9.02.2014 21:51:28