не надо тянуть в расширения свои привычки из веб-страничек. у мозиллы есть замечательная технология — xbl, которая позволяет навешивать обработчики, которые сами удаляются при вытаскивании кнопки из дома и добавляются при добавлении.
насчёт валидации — какие-то странные требования. эта «валидация» какую цель преследует?
лениво грузить модули удобно этой штукой: github.com/nin-jin/fenix/blob/master/this.jsm
используется просто:
Compinent.utils.import( 'resource://fenix/this.jsm' )
let $my= $( 'путь к папке модулей' ) // путь может быть относительным или вообще не быть
теперь везде можно использовать например $my.blinker() — при первом обращении будет загружен модуль blicker.jsm и оттуда взят объект blinker
А можно при регистрации через XBL оставить все инициации функций внутри замыкания?
Т.е., чтобы они не оказывались в глобальной области?
Потому, что валидатор (тот, про который сказано в самом начале, ещё до хабраката) не валидирует без предупреждений, если что-нибудь присутствует в контексте.
tenshi в личку (так получилось) кинул ещё вот это:
> А можно при регистрации через XBL оставить все инициации функций внутри замыкания?
через xbl можно определять методы, которые будут и элемента.
и из анонимного контента можно их вызывать
> Components.utils.import( path_to_file, object_where_file_will_be_loaded )
> Только то, что Вы предложили попадет в window.
это в модулях применяется, чтобы не надо было определять константу EXPORTED_SYMBOLS
в оверлее можно писать так:
let $= Components.utils.import( path_to_file, {} ).$
Осталось добавить статью про модерацию расширений. Сначала два месяца модерируют поверхностно и расширение светится желтым в списке (Это дополнение прошло предварительную проверку Mozilla.), потом еще столько же для окончательной модерации в обычный статус.
«Правильный» вариант с nsITimer требует написания дополнительного кода для отмены таймеров при закрытии окна.
То есть не понятно, что в нем настолько правильного, чтобы оправдать создание дополнительных велосипедов.
> gid('helloButton')
И внезапно узнаем, что, например, CSS применяется не только к самому первому #id.
А вот getElementById() из скрипта всегда вернет самый первый элемент.
И совершенно не понятно, зачем придумывать ненужные усложнения, если для устранения конфликтов достаточно создать свое уникальное «пространство имен»:
var exampleExtension = {
someMethod: function() {… }
};
Это еще не считая рекомендации снимать все добавленные listener'ы при закрытии окна.
> Моргалка…
Для моргалок есть setInterval()/clearInterval() или можно делать повторный setTimeout() после завершения предыдущего.
Причем это не одно и то же, потому как повторяющийся код выполняется не мгновенно (и с помощью setTimeout() можно получить примерно равные паузы между выполнениями этого кода).»
Все верно, но об этом же тоже вроде бы как уже известно, это ж все так, для интересу.
А в «моргалке» самое на мой взгляд веселое это не таймеры, которые там есть, а то, что в замыкании используется остаток от деления на два, который или «1» или «0».
:)
«Валидность» расширения для Firefox и пара мелочи