Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№113-10-2009 00:32:56

ELV1S
Участник
 
Группа: Members
Откуда: Earth://Russia/Moscow
Зарегистрирован: 03-01-2006
Сообщений: 40
UA: Firefox 3.5
Веб-сайт

Как правильно добавить событие TabOpen на все окна?

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

Выделить код

Код:

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 раза.


«Чтобы пробить стену лбом, нужен или большой разбег, или много лбов.» © Альберт Эйнштейн

Отсутствует

 

№214-10-2009 00:35:13

Crazy-EyE
Участник
 
Группа: Members
Зарегистрирован: 20-06-2008
Сообщений: 81
UA: Firefox 3.5

Re: Как правильно добавить событие TabOpen на все окна?

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

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

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

Отсутствует

 

№314-10-2009 20:43:48

ELV1S
Участник
 
Группа: Members
Откуда: Earth://Russia/Moscow
Зарегистрирован: 03-01-2006
Сообщений: 40
UA: Opera 10.0
Веб-сайт

Re: Как правильно добавить событие TabOpen на все окна?

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

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

Отредактировано ELV1S (14-10-2009 20:44:28)


«Чтобы пробить стену лбом, нужен или большой разбег, или много лбов.» © Альберт Эйнштейн

Отсутствует

 

№414-10-2009 22:35:05

Crazy-EyE
Участник
 
Группа: Members
Зарегистрирован: 20-06-2008
Сообщений: 81
UA: Firefox 3.5

Re: Как правильно добавить событие TabOpen на все окна?

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

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]