Comments 13
Что за «пара мелочи»?
+5
не надо тянуть в расширения свои привычки из веб-страничек. у мозиллы есть замечательная технология — xbl, которая позволяет навешивать обработчики, которые сами удаляются при вытаскивании кнопки из дома и добавляются при добавлении.
насчёт валидации — какие-то странные требования. эта «валидация» какую цель преследует?
лениво грузить модули удобно этой штукой: github.com/nin-jin/fenix/blob/master/this.jsm
используется просто:
Compinent.utils.import( 'resource://fenix/this.jsm' )
let $my= $( 'путь к папке модулей' ) // путь может быть относительным или вообще не быть
теперь везде можно использовать например $my.blinker() — при первом обращении будет загружен модуль blicker.jsm и оттуда взят объект blinker
насчёт валидации — какие-то странные требования. эта «валидация» какую цель преследует?
лениво грузить модули удобно этой штукой: github.com/nin-jin/fenix/blob/master/this.jsm
используется просто:
Compinent.utils.import( 'resource://fenix/this.jsm' )
let $my= $( 'путь к папке модулей' ) // путь может быть относительным или вообще не быть
теперь везде можно использовать например $my.blinker() — при первом обращении будет загружен модуль blicker.jsm и оттуда взят объект blinker
+2
По поводу XBL — Спасибо! Учту.
А можно при регистрации через XBL оставить все инициации функций внутри замыкания?
Т.е., чтобы они не оказывались в глобальной области?
Потому, что валидатор (тот, про который сказано в самом начале, ещё до хабраката) не валидирует без предупреждений, если что-нибудь присутствует в контексте.
А можно при регистрации через XBL оставить все инициации функций внутри замыкания?
Т.е., чтобы они не оказывались в глобальной области?
Потому, что валидатор (тот, про который сказано в самом начале, ещё до хабраката) не валидирует без предупреждений, если что-нибудь присутствует в контексте.
0
Components.utils.import( path_to_file, object_where_file_will_be_loaded )
Components.utils.import( path_to_file, object_where_file_will_be_loaded )
Только то, что Вы предложили попадет в window.
А то, что предлагаю я, попадет в «object_where_file_will_be_loaded»…
Components.utils.import( path_to_file, object_where_file_will_be_loaded )
Только то, что Вы предложили попадет в window.
А то, что предлагаю я, попадет в «object_where_file_will_be_loaded»…
0
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, {} ).$
вот ещё интересная штука: nin-jin.github.com/article/article_fiber/article_fiber.xml
> А можно при регистрации через XBL оставить все инициации функций внутри замыкания?
через xbl можно определять методы, которые будут и элемента.
и из анонимного контента можно их вызывать
> Components.utils.import( path_to_file, object_where_file_will_be_loaded )
> Только то, что Вы предложили попадет в window.
это в модулях применяется, чтобы не надо было определять константу EXPORTED_SYMBOLS
в оверлее можно писать так:
let $= Components.utils.import( path_to_file, {} ).$
вот ещё интересная штука: nin-jin.github.com/article/article_fiber/article_fiber.xml
0
Осталось добавить статью про модерацию расширений. Сначала два месяца модерируют поверхностно и расширение светится желтым в списке (Это дополнение прошло предварительную проверку Mozilla.), потом еще столько же для окончательной модерации в обычный статус.
+1
Infocatcher с forum.mozilla-russia.org/ просил передать: «Тем не менее, изменение сторонних функций через eval() имеет меньше проблем с совместимостью (в принципе, это обычный патч).
adblockplus.org/blog/five-wrong-reasons-to-use-eval-in-an-extension
piro.sakura.ne.jp/latest/blosxom/mozilla/xul/2010-02-08_eval-en.htm#section-root-children
piro.sakura.ne.jp/latest/blosxom/mozilla/extension/2010-04-06_amo-review-and-eval.htm#section-root-children
«Правильный» вариант с nsITimer требует написания дополнительного кода для отмены таймеров при закрытии окна.
То есть не понятно, что в нем настолько правильного, чтобы оправдать создание дополнительных велосипедов.
> gid('helloButton')
И внезапно узнаем, что, например, CSS применяется не только к самому первому #id.
А вот getElementById() из скрипта всегда вернет самый первый элемент.
И совершенно не понятно, зачем придумывать ненужные усложнения, если для устранения конфликтов достаточно создать свое уникальное «пространство имен»:
var exampleExtension = {
someMethod: function() {… }
};
Это еще не считая рекомендации снимать все добавленные listener'ы при закрытии окна.
> Моргалка…
Для моргалок есть setInterval()/clearInterval() или можно делать повторный setTimeout() после завершения предыдущего.
Причем это не одно и то же, потому как повторяющийся код выполняется не мгновенно (и с помощью setTimeout() можно получить примерно равные паузы между выполнениями этого кода).»
adblockplus.org/blog/five-wrong-reasons-to-use-eval-in-an-extension
piro.sakura.ne.jp/latest/blosxom/mozilla/xul/2010-02-08_eval-en.htm#section-root-children
piro.sakura.ne.jp/latest/blosxom/mozilla/extension/2010-04-06_amo-review-and-eval.htm#section-root-children
«Правильный» вариант с nsITimer требует написания дополнительного кода для отмены таймеров при закрытии окна.
То есть не понятно, что в нем настолько правильного, чтобы оправдать создание дополнительных велосипедов.
> gid('helloButton')
И внезапно узнаем, что, например, CSS применяется не только к самому первому #id.
А вот getElementById() из скрипта всегда вернет самый первый элемент.
И совершенно не понятно, зачем придумывать ненужные усложнения, если для устранения конфликтов достаточно создать свое уникальное «пространство имен»:
var exampleExtension = {
someMethod: function() {… }
};
Это еще не считая рекомендации снимать все добавленные listener'ы при закрытии окна.
> Моргалка…
Для моргалок есть setInterval()/clearInterval() или можно делать повторный setTimeout() после завершения предыдущего.
Причем это не одно и то же, потому как повторяющийся код выполняется не мгновенно (и с помощью setTimeout() можно получить примерно равные паузы между выполнениями этого кода).»
+1
Sign up to leave a comment.
«Валидность» расширения для Firefox и пара мелочи