Дополнения
==========

Дополнения добавляют новые функциональные возможности в Gecko-приложения, такие, как Firefox, SeaMonkey и Thunderbird. Есть два основных типа дополнений: расширения, которые добавляют новые функции в приложение, и темы, изменяющие пользовательский интерфейс приложения.

> 
> Для расширений и тем в Mozilla работает хранилище на addons.mozilla.org, также известное как AMO. Когда вы помещаете дополнения на AMO, они рассматриваются, и после этого становятся доступны для пользователей. Вы не обязаны загружать свои дополнения в AMO, но если вы это сделаете, пользователи могут быть уверены в том, что они были предварительно проверены и будут знать, что ваше дополнение действительно полезно.
> 
> 
> 

Дополнение может существенно повлиять на поведение приложения, на которое оно устанавливается. Мы разработали список советов, которые помогут вам удостовериться, что ваше дополнение будет приятным в использовании. Эти правила применяются для всех видов надстроек, независимо от того, размещены они на addons.mozilla.org или нет.

---

Расширения
----------

Расширения добавляют новые функции к приложениям Mozilla, например таким как Firefox и Thunderbird. С их помощью можно изменить стандартное поведение браузера, например реализовать другой способ организации и управления вкладками. Можно даже изменять содержимое отображаемого веб приложения, чтобы улучшить удобство использования или например повысить безопасность определённых сайтов.

Существует 3 различных способа сборки расширений: restartless-расширения на основе Add-on SDK, restartless-расширения с реализацией этого механизма вручную (manually bootstrapped restartless extensions), и расширения с использованием технологии Overlay.

* Restartless-расширения на основе Add-on SDK
 Разработка restartless расширений с помощью высокоуровневого JavaScript API.
* Restartless-расширения с реализацией этого механизма вручную
 Разработка расширений с самостоятельной реализацией механизма restartless.
* Расширения с использованием технологии Overlay Extensions
 Устаревшей способ разработки расширений, при котором требуется перезапуск браузера. Основан на механизме наложения XUL.

**Примечание:** **Технология WebExtensions**

В данный момент мы разрабатываем систему под названием WebExtensions, которая будет новым способом разработки расширений для браузера Firefox, эта система будет гораздо более совместима с браузерами Chrome и Opera.

В будущем она станет наиболее предпочтительной при разработке новых проектов для браузера Firefox.

В данный момент она является экспериментальной, но несмотря на это вы можете ознакомиться с документацией, если хотите её опробовать.

Где это возможно, рекомендуется выбирать Add-On SDK, который использует механизм расширения без необходимости перезапуска браузера (restartless extensions), а также упрощает разработку и убирает за собой. Если вам недостаточно возможностей комплекта средств разработки Add-on SDK для реализации ваших идей, механизм restartless вы можете осуществить самостоятельно. Технология Overlay extensions в целом устарела и не рекомендуется при разработке новых расширений.

Для получения дополнительной информации о том, какой способ использовать, прочтите это сравнение.

### Рекомендуемые практики

Вне зависимости от того, каким способом вы разрабатываете расширение, имеются общие рекомендации, следуя которым вы гарантируете пользователю максимально приятную работу с вашим расширением.

Производительность

Убедитесь в том, что ваше расширение обладает хорошей производительностью. Оно должно быть достаточно быстрым, иметь отзывчивый интерфейс и потреблять минимальный объем памяти.

Безопасность

Убедитесь в том, что ваше приложение не подвергает пользователя опасности на вредоносных веб сайтах.

Этикет

Убедитесь в том, что ваше расширение не конфликтует с другими расширениями.

### Специфика разработки для различных приложений

Большая часть документации предполагает, что вы разрабатываете для десктопной версии Firefox. Если вы разрабатываете для других основанных на движке Gecko приложений, то существуют некоторые отличия, о которых вам следует знать.

Thunderbird

Разработка расширений для почтового клиента Thunderbird.

Firefox для Андроид

Разработка расширений для Firefox под Андроид.

SeaMonkey

Разработка расширений для SeaMonkey.



---

Темы
----

Темы это дополнения, которые изменяют внешний вид пользовательского интерфейса. Существуют два вида тем: легковесные темы и полные темы.

Легковесные темы значительно легче создать, чем полные, но их возможности ограничены.

С помощью полных тем вы можете гораздо глубже менять UI приложения. Документация к полным темам устарела, но приведена здесь в качестве возможной основы для обновлённой документации.

---

Другие типы дополнений
----------------------

Поисковые плагины (en-US) являются простыми и очень специфическими типами дополнений: они добавляют новые поисковые системы для поиска в строке браузера.

**Плагины (en-US)** (не путать с расширением и дополнением) помогают приложению понять содержание, которое не имеет встроенной поддержки. NPAPI-плагины являются устаревшей технологией и новые сайты не будут её использовать. Как правило, такие плагины не доступны для использования на большинстве современных мобильных систем, и веб-сайты должны избегать их использования

Смотрите также
--------------

1. Restartless extensions
2. Legacy extensions
3. Дополнения на основе SDK
4. Techniques
    1. Promises
5. Рекомендуемая практика
    1. Производительность
    2. Безопасность
    3. Этикет
6. Темы
    1. Легковесные темы
    2. Легковесные темы FAQ
    3. Полные темы
7. Legacy Plugins
    1. Plug-in Basics (en-US)
    2. Plug-in Development Overview (en-US)
    3. Initialization and Destruction (en-US)
    4. Drawing and Event Handling (en-US)
    5. Streams (en-US)
    6. URLs (en-US)
    7. Memory (en-US)
    8. Version, UI, and Status Information (en-US)
    9. Plug-in side Plug-in API (en-US)
        1. NPP\_Destroy
        2. NPP\_DestroyStream
        3. NPP\_GetValue
        4. NP\_GetValue
        5. NPP\_HandleEvent
        6. NP\_Initialize
        7. NPP\_New
        8. NPP\_NewStream
        9. NPP\_Print
        10. NPP\_SetValue
        11. NPP\_SetWindow
        12. NP\_Shutdown
        13. NPP\_StreamAsFile
        14. NPP\_URLNotify
        15. NPP\_Write
        16. NPP\_WriteReady
    10. Browser Side Plug-in API (en-US)
        1. NPN\_DestroyStream
        2. NPN\_ForceRedraw
        3. NPN\_GetAuthenticationInfo
        4. NPN\_GetURL
        5. NPN\_GetURLNotify
        6. NPN\_GetValue
        7. NPN\_GetValueForURL
        8. NPN\_InvalidateRect
        9. NPN\_InvalidateRegion
        10. NPN\_MemAlloc
        11. NPN\_MemFlush
        12. NPN\_MemFree
        13. NPN\_NewStream
        14. NPN\_PluginThreadAsyncCall
        15. NPN\_PostURL
        16. NPN\_PostURLNotify
        17. NPN\_ReloadPlugins
        18. NPN\_RequestRead
        19. NPN\_SetValue
        20. NPN\_SetValueForURL
        21. NPN\_Status
        22. NPN\_UserAgent
        23. NPN\_Version
        24. NPN\_Write
    11. Scripting plugins (en-US)
        1. NPString
        2. NPVariant
        3. NPN\_ReleaseVariantValue
        4. NPN\_GetStringIdentifier
        5. NPN\_GetStringIdentifiers
        6. NPN\_GetIntIdentifier
        7. NPN\_IdentifierIsString
        8. NPN\_UTF8FromIdentifier
        9. NPN\_IntFromIdentifier
        10. NPObject
        11. NPN\_CreateObject
        12. NPN\_RetainObject
        13. NPN\_ReleaseObject
        14. NPN\_Invoke
        15. NPN\_InvokeDefault
        16. NPN\_Evaluate
        17. NPN\_GetProperty
        18. NPN\_SetProperty
        19. NPN\_RemoveProperty
        20. NPN\_HasProperty
        21. NPN\_HasMethod
        22. NPN\_SetException
        23. NPClass
    12. Structures (en-US)
    13. Constants (en-US)
    14. External Resources
8. Publishing add-ons
    1. Signing and distributing your add-on
    2. Submit a new add-on
    3. Policies
        1. Developer Agreement
        2. Review Process
        3. Add-on guidelines
        4. Featured Add-ons
        5. Contacting Us
9. Community and Support
    1. Add-ons Blog
    2. Add-on Forums
    3. Stack Overflow
    4. Development Newsgroup
    5. IRC Channel