Дополнения

Дополнения добавляют новые функциональные возможности в 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.

Примечание: Технология 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