Страницы: 1
Я пробовал так:
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 я не знаю. Можно пример кода?
Отредактировано ELV1S (14-10-2009 20:44:28)
«Чтобы пробить стену лбом, нужен или большой разбег, или много лбов.» © Альберт Эйнштейн
Отсутствует
Исходное назначение модулей - писать туда функции, которые используются в разных местах, чтобы не дублировать их. Побочным эффектом является то, что модули загружаются только один раз и являются общими для всего приложения, и поэтому переменные, объявленные внутри модулей, тоже общие (в частности, общие для всех окон). Поэтому, модули можно использовать для взаимодействия МЕЖДУ окнами (простейший пример - расширение, подсчитывающее общее количество когда-либо открытых за сессию вкладок). Однако если в вашем случае достаточно, чтобы каждое окно обрабатывало только СВОИ вкладки, модули конечно не нужны.
Отсутствует
Страницы: 1