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

Выделить код

Код:

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

Это работает неправильно, если окон больше одного. При каждом открытии таба, событие срабатывает для каждого окна. Если окон 2, то сработает 2 раза.

Видимо этот код выполняется в оверлее для browser.xul. Т.е. в КАЖДОМ окне выполняется код "зарегистрировать обработчик события для всех окон", поэтому количество alert-ов равно количеству открытых окон Фокса.

Если возможно, то лучше устанавливать обработчик в каждом окне только для ЭТОГО окна.

Но если требуется централизованная обработка событий, то надо что-то из этого (скорее всего JS Modules): https://developer.mozilla.org/en/Workin … ta_sharing

Я уже разобрался, спасибо.

Как тут применить JS Modules я не знаю. Можно пример кода?

Исходное назначение модулей - писать туда функции, которые используются в разных местах, чтобы не дублировать их. Побочным эффектом является то, что модули загружаются только один раз и являются общими для всего приложения, и поэтому переменные, объявленные внутри модулей, тоже общие (в частности, общие для всех окон). Поэтому, модули можно использовать для взаимодействия МЕЖДУ окнами (простейший пример - расширение, подсчитывающее общее количество когда-либо открытых за сессию вкладок). Однако если в вашем случае достаточно, чтобы каждое окно обрабатывало только СВОИ вкладки, модули конечно не нужны.