diff --git a/files/ru/mozilla/add-ons/index.html b/files/ru/mozilla/add-ons/index.html deleted file mode 100644 index c4be84f8b823af..00000000000000 --- a/files/ru/mozilla/add-ons/index.html +++ /dev/null @@ -1,240 +0,0 @@ ---- -title: Дополнения -slug: Mozilla/Add-ons -tags: - - NeedsTranslation - - TopicStub - - Дополнения - - Расширения -translation_of: Mozilla/Add-ons ---- -
Дополнения добавляют новые функциональные возможности в 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 приложений, то существуют некоторые отличия, о которых вам следует знать.
- -Темы это дополнения, которые изменяют внешний вид пользовательского интерфейса. Существуют два вида тем: легковесные темы и полные темы.
- -Легковесные темы значительно легче создать, чем полные, но их возможности ограничены.
-С помощью полных тем вы можете гораздо глубже менять UI приложения. Документация к полным темам устарела, но приведена здесь в качестве возможной основы для обновлённой документации.
-Поисковые плагины являются простыми и очень специфическими типами дополнений: они добавляют новые поисковые системы для поиска в строке браузера.
- -Плагины (не путать с расширением и дополнением) помогают приложению понять содержание, которое не имеет встроенной поддержки. NPAPI-плагины являются устаревшей технологией и новые сайты не будут её использовать. Как правило, такие плагины не доступны для использования на большинстве современных мобильных систем, и веб-сайты должны избегать их использования
- -{{AddonSidebar}}
- -Расширение состоит из набора файлов, упакованных для распространения и установки. В этой статье мы быстро рассмотрим файлы, которые могут присутствовать в расширении.
- -Это единственный файл, который должен присутствовать в каждом расширении. Он содержит основные метаданные, такие как его имя, версию и требуемые разрешения. Он также предоставляет указатели на другие файлы в расширении.
- -Этот манифест также может содержать указатели на несколько других типов файлов:
- -
-
Для получения подробной информации см. справочную страницу manifest.json
- -Помимо ссылок, указанных в манифесте, расширение может включать дополнительные веб-страницы расширения с поддерживающимися файлами.
- -Расширения часто должны поддерживать долгосрочное состояние или выполнять долгосрочные операции независимо от срока жизни любой конкретной веб-страницы или окна браузера. Для этого нужны фоновые сценарии.
- -Фоновые сценарии загружаются сразу после загрузки расширения и остаются загруженными до тех пор, пока расширение не будет отключено или удалено. вы можете использовать любой API расширений в сценарии, если вы запросили необходимые разрешения.
- -Вы можете включить фоновый скрипт, используя background
ключ в «manifest.json»:
// manifest.json - -"background": { - "scripts": ["background-script.js"] -}- -
Вы можете указать несколько фоновых сценариев: если вы это сделаете, они выполняются в том же контексте, как и несколько сценариев, загруженных на одной веб-странице.
- -Вместо указания несколько фоновых сценариев вы можете указать фоновую страницу, которая так же преимущества поддержки ES6 модулей:
- -manifest.json
- -// manifest.json
-
-"background": {
- "page": "background-page.html"
-}
-
-background-page.html
- -<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <script type="module" src="background-script.js"></script>
- </head>
-</html>
-
-Фоновые скрипты запускаются в пространстве специальной страницы, называемой фоновой. Это даёт им доступ к глобальному window
объекту, а так же ко всем его DOM APIs.
Фоновые скрипты могут использовать любые API расширений, если расширение имеет необходимые разрешения.
- -Фоновые скрипты могут осуществлять XHR запросы к любому домену, если расширение имеет host разрешения.
- -Фоновые скрипты не получают прямого доступа к веб-страницам. Однако они могут загружать скрипты содержимого на веб-страницы и взаимодействовать с этими скриптами с помощью API передачи сообщений.
- -Фоновые скрипты ограничены в выполнении потенциально опасных операций, таких как eval()
, через политику безопасности содержимого. Подробнее см. Content Security Policy.
Ваше расширение может иметь разнообразные компоненты интерфейса, определённые в HTML документах:
- -Для каждого из этих компонентов вы создаёте HTML файл и помещаете специальную информацию в manifest.json. HTML файл может в себя включать CSS и JavaScript файлы, как и любая web-страница.
- -Всё это типы веб-страниц расширения, и, в отличие от нормальных веб-страниц, ваш JavaScript может использовать все привелегии WebExtension APIs, как и ваши фоновые скрипты. Они даже могут получить доступ к переменным в фоновой странице, используя {{WebExtAPIRef("runtime.getBackgroundPage()")}}.
- -Вы также можете включить HTML документы в ваше расширение, даже если они не будут включены в какой-либо существующий компонент пользовательского интерфейса. В отличие от документов, которые вы можете предоставить для боковых панелей, всплывающих окон или страниц настроек, эти документы не содержатся в manifest.json. Однако, они также имеют такой же доступ к WebExtension APIs, как и фоновые скрипты.
- -Вы можете загрузить такую страницу, используя {{WebExtAPIRef("windows.create()")}} или {{WebExtAPIRef("tabs.create()")}}.
- -Подробнее см. Extension pages.
- -Используйте встраиваемые скрипты для доступа и изменения веб-страниц. Встраиваемые скрипты загружаются в веб-страницу и исполняются в контексте данной конкретной страницы.
- -Встраиваемые скрипты предоставляются расширением; этим они отличаются от скриптов, загруженных самой веб-страницей, включая тех, что загружены с помощью {{HTMLElement("script")}} элемента веб-страницы.
- -Встраиваемые скрипты имеют доступ и могут манипулировать DOM, как и обычные скрипты, загруженные веб-страницей.
- -В отличие от обычных скриптов, они могут:
- -Встраиваемые скрипты не могут напрямую взаимодействовать с обычными скриптами на странице, но они могут обмениваться сообщениями с помощью стандартного window.postMessage()
API.
Обычно, когда мы говорим о встраиваемых скриптах, мы отсылаемся к JavaScript, но вы так же можете внедрить CSS в веб-страницы, используя этот же механизм.
- -Подробнее см. content scripts.
- -Веб-доступные ресурсы - это ресурсы вроде изображений, HTML, CSS и JavaScript, которые вы включаете в расширение и хотите сделать доступными для встраиваемых скриптов и оригинальных скриптов веб-страницы. Такие ресурсы могут быть доступны скриптам через специальную URI схему.
- -Например, если встраиваемый скрипт хочет добавить какие-либо изображения в веб-страницу, вы можете включить эти изображения в расширение и сделать их веб-доступными. Тогда встраиваемый скрипт может создать и добавить img
тэги, которые будут ссылаться на эти изображения через src
атрибут.
Подробнее см. web_accessible_resources секцию manifest.json.
- -- -
diff --git a/files/ru/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.md b/files/ru/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.md new file mode 100644 index 00000000000000..0ea51022188740 --- /dev/null +++ b/files/ru/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.md @@ -0,0 +1,143 @@ +--- +title: Анатомия Расширения +slug: Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension +tags: + - Расширение + - веб расширение +translation_of: Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension +--- +{{AddonSidebar}} + +Расширение состоит из набора файлов, упакованных для распространения и установки. В этой статье мы быстро рассмотрим файлы, которые могут присутствовать в расширении. + +## manifest.json + +Это единственный файл, который должен присутствовать в каждом расширении. Он содержит основные метаданные, такие как его имя, версию и требуемые разрешения. Он также предоставляет указатели на другие файлы в расширении. + +Этот манифест также может содержать указатели на несколько других типов файлов: + +- [Background pages](/ru/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Background_scripts): Реализует долгоиграющую логику. +- Иконки для расширения и любых кнопок, которые оно может определить. +- [Sidebars, popups, and options pages](/ru/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Sidebars_popups_options_pages): HTML-документы, которые предоставляют содержимое для различных компонентов пользовательского интерфейса. +- [Content scripts](/ru/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Content_scripts): JavaScript сценарии вашего расширения, которые будут исполняться на веб-страницах. +- [Web-accessible resources](/ru/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Web_accessible_resources): Делает контент вашего расширения видимым для веб-страниц и скриптов. + +![](https://mdn.mozillademos.org/files/13669/webextension-anatomy.png) + +Для получения подробной информации см. справочную страницу [manifest.json](/ru/docs/Mozilla/Add-ons/WebExtensions/manifest.json) + +Помимо ссылок, указанных в манифесте, расширение может включать дополнительные [веб-страницы расширения](/ru/docs/Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Extension_pages) с поддерживающимися файлами. + +## Фоновые скрипты + +Расширения часто должны поддерживать долгосрочное состояние или выполнять долгосрочные операции независимо от срока жизни любой конкретной веб-страницы или окна браузера. Для этого нужны фоновые сценарии. + +Фоновые сценарии загружаются сразу после загрузки расширения и остаются загруженными до тех пор, пока расширение не будет отключено или удалено. вы можете использовать любой [API расширений](/ru/docs/Mozilla/Add-ons/WebExtensions/API) в сценарии, если вы запросили необходимые [разрешения](/ru/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions). + +### Спецификации фоновых скриптов + +Вы можете включить фоновый скрипт, используя `background` ключ в «manifest.json»: + +```json +// manifest.json + +"background": { + "scripts": ["background-script.js"] +} +``` + +Вы можете указать несколько фоновых сценариев: если вы это сделаете, они выполняются в том же контексте, как и несколько сценариев, загруженных на одной веб-странице. + +Вместо указания несколько фоновых сценариев вы можете указать фоновую страницу, которая так же преимущества поддержки ES6 модулей: + +**manifest.json** + +```json +// manifest.json + +"background": { + "page": "background-page.html" +} +``` + +**background-page.html** + +```html + + + + + + + +``` + +### Окружение фоновых скриптов + +#### DOM APIs + +Фоновые скрипты запускаются в пространстве специальной страницы, называемой фоновой. Это даёт им доступ к глобальному [`window`](/en-US/docs/Web/API/Window) объекту, а так же ко всем его DOM APIs. + +#### WebExtension APIs + +Фоновые скрипты могут использовать любые [API расширений](/ru/docs/Mozilla/Add-ons/WebExtensions/API), если расширение имеет необходимые [разрешения](/ru/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions). + +#### Многоцелевой доступ + +Фоновые скрипты могут осуществлять XHR запросы к любому домену, если расширение имеет [host разрешения](/ru/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions). + +#### Web-содержимое + +Фоновые скрипты не получают прямого доступа к веб-страницам. Однако они могут загружать [скрипты содержимого](/ru/docs/Mozilla/Add-ons/WebExtensions/Content_scripts) на веб-страницы и [взаимодействовать с этими скриптами с помощью API передачи сообщений](/ru/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#Communicating_with_background_scripts). + +#### Политика безопасности содержимого + +Фоновые скрипты ограничены в выполнении потенциально опасных операций, таких как [`eval()`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval), через политику безопасности содержимого. Подробнее см. [Content Security Policy](/ru/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy). + +## Боковые панели (sidebar), всплывающие окна (popup), страницы настроек + +Ваше расширение может иметь разнообразные компоненты интерфейса, определённые в HTML документах: + +- [Боковая панель (sidebar](/ru/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars)) - это панель, отображаемая в окне браузера с левой стороны, рядом с веб-страницей +- [Всплывающие окна (popup](/ru/docs/Mozilla/Add-ons/WebExtensions/user_interface/Popups)) - диалоговое окно, отображаемое по клику на [кнопке](/ru/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_action) на [панели инструментов](/ru/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_action) или в адресной строке +- [Страница настроек](/ru/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages) открывается, когда пользователь обращается к настройкам расширения на странице менеджера расширений. + +Для каждого из этих компонентов вы создаёте HTML файл и помещаете специальную информацию в [manifest.json](/ru/docs/Mozilla/Add-ons/WebExtensions/manifest.json). HTML файл может в себя включать CSS и JavaScript файлы, как и любая web-страница. + +Всё это типы [веб-страниц расширения](/ru/docs/Mozilla/Add-ons/WebExtensions/user_interface/Extension_pages), и, в отличие от нормальных веб-страниц, ваш JavaScript может использовать все привелегии WebExtension APIs, как и ваши фоновые скрипты. Они даже могут получить доступ к переменным в фоновой странице, используя {{WebExtAPIRef("runtime.getBackgroundPage()")}}. + +## Веб-страницы расширения + +Вы также можете включить HTML документы в ваше расширение, даже если они не будут включены в какой-либо существующий компонент пользовательского интерфейса. В отличие от документов, которые вы можете предоставить для боковых панелей, всплывающих окон или страниц настроек, эти документы не содержатся в manifest.json. Однако, они также имеют такой же доступ к WebExtension APIs, как и фоновые скрипты. + +Вы можете загрузить такую страницу, используя {{WebExtAPIRef("windows.create()")}} или {{WebExtAPIRef("tabs.create()")}}. + +Подробнее см. [Extension pages](/ru/docs/Mozilla/Add-ons/WebExtensions/user_interface/Extension_pages). + +## Встраиваемые скрипты + +Используйте встраиваемые скрипты для доступа и изменения веб-страниц. Встраиваемые скрипты загружаются в веб-страницу и исполняются в контексте данной конкретной страницы. + +Встраиваемые скрипты предоставляются расширением; этим они отличаются от скриптов, загруженных самой веб-страницей, включая тех, что загружены с помощью {{HTMLElement("script")}} элемента веб-страницы. + +Встраиваемые скрипты имеют доступ и могут манипулировать DOM, как и обычные скрипты, загруженные веб-страницей. + +В отличие от обычных скриптов, они могут: + +- Осуществлять XHR запросы. +- Использовать часть [API расширений](/ru/docs/Mozilla/Add-ons/WebExtensions/API). +- Обмениваться сообщениями с их фоновыми скриптами и таким образом иметь доступ ко всему WebExtension APIs. + +Встраиваемые скрипты не могут напрямую взаимодействовать с обычными скриптами на странице, но они могут обмениваться сообщениями с помощью стандартного [`window.postMessage()`](/en-US/docs/Web/API/Window/postMessage) API. + +Обычно, когда мы говорим о встраиваемых скриптах, мы отсылаемся к JavaScript, но вы так же можете внедрить CSS в веб-страницы, используя этот же механизм. + +Подробнее см. [content scripts](/ru/docs/Mozilla/Add-ons/WebExtensions/Content_scripts). + +## Веб-доступные ресурсы + +Веб-доступные ресурсы - это ресурсы вроде изображений, HTML, CSS и JavaScript, которые вы включаете в расширение и хотите сделать доступными для встраиваемых скриптов и оригинальных скриптов веб-страницы. Такие ресурсы могут быть доступны скриптам через специальную URI схему. + +Например, если встраиваемый скрипт хочет добавить какие-либо изображения в веб-страницу, вы можете включить эти изображения в расширение и сделать их веб-доступными. Тогда встраиваемый скрипт может создать и добавить [`img`](/en-US/docs/Web/HTML/Element/img) тэги, которые будут ссылаться на эти изображения через `src` атрибут. + +Подробнее см. [web_accessible_resources](/ru/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources) секцию manifest.json. diff --git a/files/ru/mozilla/add-ons/webextensions/api/cookies/cookie/index.html b/files/ru/mozilla/add-ons/webextensions/api/cookies/cookie/index.html deleted file mode 100644 index 25369878bee8e4..00000000000000 --- a/files/ru/mozilla/add-ons/webextensions/api/cookies/cookie/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: cookies.Cookie -slug: Mozilla/Add-ons/WebExtensions/API/cookies/Cookie -tags: - - API - - Cookies - - cookie - - Дополнения - - Расширения - - Справка - - данные -translation_of: Mozilla/Add-ons/WebExtensions/API/cookies/Cookie ---- -
Тип Cookie
из {{WebExtAPIRef("cookies")}} API представляет собой информацию о HTTP cookie.
Значения этого типа - объекты, которые могут содержать следующие свойства:
- -name
string
- содержит имя cookie.value
string
- содержит значение cookie.domain
string
- содержит домен, которому принадлежит cookie (например, "www.google.com", "example.com").hostOnly
boolean
- true
если cookie является host-only (то есть запрашивающий хост должен в точности совпадать с доменом cookie), в ином случае false
.path
string
- содержит path cookie.secure
boolean
- true
, если cookie помечен как secure (то есть его область действия ограничена безопасными каналами, обычно HTTPS), в ином случае false
.httpOnly
boolean
- true
если cookie помечен как HttpOnly (то есть он недоступен для клиентских скриптов), иначе false
.session
boolean
- true
если cookie является сессионным, false
если cookie является постоянным с указанным временем жизни.expirationDate
{{optional_inline}}number
- содержит срок годности cookie, который представляется количеством секунд с начала UNIX-эры. Отсутствует для сессионных cookie.storeId
string
- представляет собой ID хранилища, в котором хранится данный cookie, как указано в соответствии с {{WebExtAPIRef("cookies.getAllCookieStores()")}}.{{Compat}}
- -В большинстве методов из cookies API объекты типа Cookie
используются как входные параметры методов, либо же как возвращаемые значения. К примеру, вызов {{WebExtAPIRef("cookies.getAll()")}} возвращает массив объектов типа Cookie
.
В примере ниже мы запрашиваем все cookie, а затем выводим в лог некоторые из полей полученных Cookie
объектов:
function logCookies(cookies) { - for (cookie of cookies) { - console.log(`Domain: ${cookie.domain}`); - console.log(`Name: ${cookie.name}`); - console.log(`Value: ${cookie.value}`); - console.log(`Persistent: ${!cookie.session}`); - } -} - -var gettingAll = browser.cookies.getAll({}); -gettingAll.then(logCookies);- -
{{WebExtExamples}}
- -Это API основано на API Chromium chrome.cookies
. Эта документация основана на cookies.json
из кода Chromium.
Информация о совместимости Microsoft Edge предоставлена корпорацией Microsoft и включена здесь под лицензией Creative Commons Attribution 3.0 United States License.
-// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
Позволяет WebExtensions получить и установить куки ,а также сообщить об их изменении.
- -Для использования этого API,вам нужно предоставить доступ API permission в вашем файле manifest.json,а также host permissions для тех сайтов чьи куки вам нужны для доступа.Смотрите cookie Permissions.
- -In order to use this API, an add-on must specify the "cookies" API permission in its manifest, along with host permissions for any sites for which it wishes to access cookies. The add-on may read or write any cookies which could be read or written by a URL matching the host permissions. For example:
- -http://*.example.com/
An add-on with this host permission may:
- -www.example.com
, with any path.www.example.com
, with any path.It may not:
- -www.example.com
.http://www.example.com/
An add-on with this host permission may:
- -www.example.com
, with any path..example.com
, with any path.www.example.com
with any path..example.com
with any path.It may not:
- -foo.example.com
.foo.www.example.com
.*://*.example.com/
An add-on with this host permission may:
- -www.example.com
with any path.{{Compat}}
- -Promises are not supported in Edge. Use callbacks instead.
- -{{WebExtExamples("h2")}}
- -This API is based on Chromium's chrome.cookies
API. This documentation is derived from cookies.json
in the Chromium code.
Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
-// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
Позволяет расширениям взаимодействовать с менеджером загрузки браузера. Этот модуль API можно использовать для загрузки, отмены, приостановки, возобновления загрузки файлов и отображения загруженных файлов в файловом менеджере.
- -Для использования этого API вам необходимо указать "downloads" API permission в вашем manifest.json файле.
- -downloadId
when a download is erased from history.bytesReceived
changes, this event fires with the downloadId
and an object containing the properties that changed.{{Compat}}
- -{{WebExtExamples("h2")}}
- -This API is based on Chromium's chrome.downloads
API.
Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
-// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
WebExtension JavaScript API может быть использован в фоновых скриптах расширения, а так же в любых других документах, поставляемых вместе с расширением, таких как документы во всплывающих окнах после нажатия кнопок активации расширения browser action на панели инструментов или page action в строке адреса, боковой панели, страницах настроек или новых открытых вкладках. Некоторые из этих API могут быть доступны на встраиваемых в страницу скриптах (см. список в руководстве по встраиваемым скриптам).
- -Для использования отдельных более продвинутых API, необходимо запросить разрешения в manifest.json вашего дополнения.
- -Вы можете получить доступ к API, используя пространство имён browser
:
function logTabs(tabs) { - console.log(tabs); -} - -browser.tabs.query({currentWindow: true}, logTabs);-
Многие API выполняются асинхронно, возвращая Promise
:
function logCookie(c) { - console.log(c); -} - -function logError(e) { - console.error(e); -} - -var setCookie = browser.cookies.set( - {url: "/"} -); -setCookie.then(logCookie, logError);-
chrome
вместо browser
и колбэки для асинхронных функций вместо промисов.
-
-Для поддержки портирования, реализация Firefox WebExtensions API так же поддерживает пространство имён chrome
и использование колбэков. Это позволяет в большинстве случаев не изменять код, изначально написанный для Chrome.
Mozilla так же предоставляет полифил, который позволяет коду, использующему browser
и промисы, работать без изменений в Chrome: https://github.com/mozilla/webextension-polyfill.
Microsoft Edge использует пространство имён browser
, но ещё не поддерживает, основанный на промисах асинхронный API. В Edge на данный момент асинхронные вызовы API должны использовать колбэки.
Не все браузеры поддерживают все API: детали см. Browser support for JavaScript APIs.
-browser.runtime.getManifest() -+### Возвращаемое значение -
Нет.
+## Совместимость с браузерами -object
- объект JSON, представляющий манифест.
{{Compat}}
+Получить манифест и вывести его свойство "name": -Получить манифест и вывести его свойство "name":
+{{WebExtExamples}} -var manifest = browser.runtime.getManifest(); -console.log(manifest.name);+> **Примечание:** Это API основано на API Chromium [`chrome.runtime`](https://developer.chrome.com/extensions/runtime). Эта документация основана на [`runtime.json`](https://chromium.googlesource.com/chromium/src/+/master/extensions/common/api/runtime.json) из кода Chromium. +> +> Информация о совместимости Microsoft Edge предоставлена корпорацией Microsoft и включена здесь под лицензией Creative Commons Attribution 3.0 United States License. -
{{WebExtExamples}}
- -Этот API основан на API Chromium chrome.runtime
. Настоящая документация унаследована от runtime.json
в коде Chromium.
Данные о совместимости Microsoft Edge предоставлены Корпорацией Microsoft и включены сюда под лицензией Creative Commons Attribution 3.0 United States License.
-// Copyright 2015 The Chromium Authors. All rights reserved. + diff --git a/files/ru/mozilla/add-ons/webextensions/api/runtime/index.html b/files/ru/mozilla/add-ons/webextensions/api/runtime/index.html deleted file mode 100644 index ae780b9d976f8c..00000000000000 --- a/files/ru/mozilla/add-ons/webextensions/api/runtime/index.html +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: runtime -slug: Mozilla/Add-ons/WebExtensions/API/runtime -tags: - - API - - Add-ons - - Extensions - - Interface - - NeedsTranslation - - Reference - - TopicStub - - WebExtensions - - runtime -translation_of: Mozilla/Add-ons/WebExtensions/API/runtime ---- -{{AddonSidebar}}- -This module provides information about your extension and the environment it's running in.
- -It also provides messaging APIs enabling you to:
- -
Contains information about the sender of a message or connection request.
-Opens your extension's options page.
-{{Compat}}
- -This API is based on Chromium's chrome.runtime
API. This documentation is derived from runtime.json
in the Chromium code.
Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
-// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
Получает сведения об указанной вкладке.
+Получает сведения об указанной вкладке. -browser.tabs.get( +```js +browser.tabs.get( tabId, // integer function(tab) {...} // function ) -+``` -
tabId
integer
.callback
function
. Функция принимает следующие аргументы:
tab
{{Compat}}
+ - `tab` + - : {{WebExtAPIRef('tabs.Tab')}}. -{{WebExtExamples}}
+{{Compat}} -Этот API основан на Chromium chrome.tabs
API. Это документация получена из tabs.json
в коде Chromium.
// Copyright 2015 The Chromium Authors. All rights reserved. +> **Примечание:** Этот API основан на Chromium [`chrome.tabs`](https://developer.chrome.com/extensions/tabs#method-get) API. Это документация получена из [`tabs.json`](https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/tabs.json) в коде Chromium. + + diff --git a/files/ru/mozilla/add-ons/webextensions/api/tabs/hide/index.html b/files/ru/mozilla/add-ons/webextensions/api/tabs/hide/index.html deleted file mode 100644 index b380183702f95e..00000000000000 --- a/files/ru/mozilla/add-ons/webextensions/api/tabs/hide/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: tabs.hide() -slug: Mozilla/Add-ons/WebExtensions/API/tabs/hide -translation_of: Mozilla/Add-ons/WebExtensions/API/tabs/hide ---- -{{AddonSidebar()}}- -Hides one or more tabs.
- -Hidden tabs are no longer visible in the browser's tabstrip. Hidden tabs are not automatically discarded: the code running in them continues to run. You can explicitly discard tabs whenever you hide them: although this is not appropriate in all situations, it will help to reduce the resources used by the browser.
- -This is an asynchronous function that returns a
- -Promise
.Not all tabs are eligible for being hidden:
- -
The first time an extension hides a tab, the browser will tell the user that the tab is being hidden, show them how they can access the hidden tab, and give them the option of disabling the extension instead.
- -To use this API you must have the "tabHide" permission.
- -var hiding = browser.tabs.hide( - tabIds // integer or integer array -) -- -
tabIds
integer
or array
of integer
. The IDs of the tab or tabs to hide.
If any of these tabs are not eligible for being hidden, they will not be hidden, but the call will still succeed and eligible tabs will still be hidden. For example, if you pass [1, 3]
, and 1
identifies the active tab, then only 3
will be hidden.
However, if any of the tab IDs are invalid, the call will fail and no tabs will be hidden.
A Promise
that will be fulfilled with an array containing the IDs of the tabs that were hidden. If any error occurs, the promise will be rejected with an error message.
{{Compat}}
- -Hide a single tab:
- -function onHidden() { - console.log(`Hidden`); -} - -function onError(error) { - console.log(`Error: ${error}`); -} - -browser.tabs.hide(2).then(onHidden, onError);- -
Hide multiple tabs:
- -function onHidden() { - console.log(`Hidden`); -} - -function onError(error) { - console.log(`Error: ${error}`); -} - -browser.tabs.hide([15, 14, 1]).then(onHidden, onError);- -
{{WebExtExamples}}
diff --git a/files/ru/mozilla/add-ons/webextensions/api/tabs/hide/index.md b/files/ru/mozilla/add-ons/webextensions/api/tabs/hide/index.md new file mode 100644 index 00000000000000..6965ef71ab6e8a --- /dev/null +++ b/files/ru/mozilla/add-ons/webextensions/api/tabs/hide/index.md @@ -0,0 +1,81 @@ +--- +title: tabs.hide() +slug: Mozilla/Add-ons/WebExtensions/API/tabs/hide +translation_of: Mozilla/Add-ons/WebExtensions/API/tabs/hide +--- +{{AddonSidebar()}} + +Hides one or more tabs. + +Hidden tabs are no longer visible in the browser's tabstrip. Hidden tabs are not automatically [discarded](/en-US/Add-ons/WebExtensions/API/tabs/discard): the code running in them continues to run. You can explicitly discard tabs whenever you hide them: although this is not appropriate in all situations, it will help to reduce the resources used by the browser. + +This is an asynchronous function that returns a [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). + +Not all tabs are eligible for being hidden: + +- Tabs that are pinned cannot be hidden. +- Tabs that are sharing the screen, microphone or camera cannot be hidden. +- The current active tab cannot be hidden. +- Tabs that are in the process of being closed cannot be hidden. + +The first time an extension hides a tab, the browser will tell the user that the tab is being hidden, show them how they can access the hidden tab, and give them the option of disabling the extension instead. + +To use this API you must have the "tabHide" [permission](/en-US/Add-ons/WebExtensions/manifest.json/permissions). + +## Syntax + +```js +var hiding = browser.tabs.hide( + tabIds // integer or integer array +) +``` + +### Parameters + +- `tabIds` + + - : `integer` or `array` of `integer`. The IDs of the tab or tabs to hide. + + If any of these tabs are not eligible for being hidden, they will not be hidden, but the call will still succeed and eligible tabs will still be hidden. For example, if you pass `[1, 3]`, and `1` identifies the active tab, then only `3` will be hidden. + + However, if any of the tab IDs are invalid, the call will fail and no tabs will be hidden. + +### Return value + +A [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) that will be fulfilled with an array containing the IDs of the tabs that were hidden. If any error occurs, the promise will be rejected with an error message. + +## Browser compatibility + +{{Compat}} + +## Examples + +Hide a single tab: + +```js +function onHidden() { + console.log(`Hidden`); +} + +function onError(error) { + console.log(`Error: ${error}`); +} + +browser.tabs.hide(2).then(onHidden, onError); +``` + +Hide multiple tabs: + +```js +function onHidden() { + console.log(`Hidden`); +} + +function onError(error) { + console.log(`Error: ${error}`); +} + +browser.tabs.hide([15, 14, 1]).then(onHidden, onError); +``` + +{{WebExtExamples}} diff --git a/files/ru/mozilla/add-ons/webextensions/api/tabs/index.html b/files/ru/mozilla/add-ons/webextensions/api/tabs/index.html deleted file mode 100644 index 7818511f4e47f7..00000000000000 --- a/files/ru/mozilla/add-ons/webextensions/api/tabs/index.html +++ /dev/null @@ -1,173 +0,0 @@ ---- -title: tabs -slug: Mozilla/Add-ons/WebExtensions/API/tabs -tags: - - API - - Add-ons - - Extensions - - Interface - - NeedsTranslation - - Non-standard - - Reference - - TopicStub - - WebExtensions - - tabs -translation_of: Mozilla/Add-ons/WebExtensions/API/tabs ---- -Interact with the browser's tab system. You can use this API to get a list of opened tabs and to create, modify, and rearrange tabs in the browser.
- -You can use most of this API without any special permission. However, to access Tab.url
, Tab.title
, and Tab.faviconUrl
, you need to have the "tabs" permission. In Firefox this also means you need "tabs" to {{WebExtAPIRef("tabs.query", "query")}} by URL.
automatic
.per-origin
when in automatic
mode, and per-tab
otherwise.window.type === "normal"
) windows.<all_urls>
permission to use this method.{{Compat}}
- -{{WebExtExamples("h2")}}
- -This API is based on Chromium's chrome.tabs
API. This documentation is derived from tabs.json
in the Chromium code.
// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
Добавляет обработчики событий на различных стадиях HTTP запроса. Обработчик получить детальную информацию о запросе и способен изменить или отменить запрос.
- -Каждое событие запущено на определённой стадии запроса. Типичный порядок событий такой:
- -{{WebExtAPIRef("webRequest.onErrorOccurred", "onErrorOccurred")}} Может быть запущен в любой момент во время запроса. Чреда событий может отличаться от приведённой выше: например, в Firefox, после HSTS обновления, событие onBeforeRedirect
будет запущено сразу же после onBeforeRequest
.
Все события, кроме onErrorOccurred
, могут принимать три аргумента в addListener()
:
extraInfoSpec
. Может быть использован для передачи дополнительных специфических для события инструкций.Функции - обработчику передаётся объект details
который содержит информацию о запросе. Она содержит ID запроса, который обеспечен для включения надстройки, которая позволяет соотносить события, ассоциируемые с одним запросом. Это уникально в пределах сессии и контекста надстройки. Информация остаётся одинаковой везде на протяжении запроса, даже при перенаправлениях и обменах аутентификации.
Для использования webRequest API для определённого хоста, расширение должно иметь "webRequest" API permission и host permission для этого хоста. Для использования возможности "блокирования" расширение должно также иметь "webRequestBlocking" API разрешение.
- -Для перехвата ресурсов, загруженных страницей (таких как картинки, скрипты или таблицы стилей), расширение должно иметь разрешение хоста для ресурса также как и для главной страницы, запрашивающей ресурс. К примеру, если страница на "https://developer.mozilla.org" загружает картинку из "https://mdn.mozillademos.org", тогда расширение должно иметь разрешения обоих хостов чтобы перехватить запрос картинки.
- -Используя некоторые из этих событий, вы можете модифицировать запрос. Конкретно, вы можете:
- -Чтобы сделать это, вам необходимо передать опцию со значением "blocking" в аргументе extraInfoSpec
к addListener()
. Это делает обработчик синхронным. В обработчике, вы можете тогда возвратить объект {{WebExtAPIRef("webRequest.BlockingResponse", "BlockingResponse")}} который индикует модификацию, какую вам нужно сделать: например, модифицированный заголовок запроса который вы хотите отправить.
В обработчике {{WebExtAPIRef("webRequest.onHeadersReceived", "onHeadersReceived")}} вы имеете доступ к TLS свойствам запроса через вызов {{WebExtAPIRef("webRequest.getSecurityInfo()", "getSecurityInfo()")}}. Чтобы сделать это, вы должны также передать "blocking" в extraInfoSpec
аргументе к addListener()
события.
Вы можете прочитать детали TLS хэндшейка, но не можете модифицировать их или перезаписать решения доверы браузера.
- -Для того, чтобы модифицировать тело HTTP ответа на запрос, вызовите {{WebExtAPIRef("webRequest.filterResponseData")}}, и передайте ID запроса. Это возвратит объект {{WebExtAPIRef("webRequest.StreamFilter")}} который вы сможете использовать чтобы исследовать и изменять данные когда они получены браузером.
- -Чтобы сделать это, у вас должно быть "webRequestBlocking" API разрешение, а также "webRequest" API permission и host permission от соответствующего хоста.
- -An object of this type is returned by event listeners that have set "blocking"
in their extraInfoSpec
argument. By setting particular properties in BlockingResponse
, the listener can modify network requests.
name
and either value
or binaryValue
.handlerBehaviorChanged()
can be called in a 10 minute period.{{WebExtAPIRef("webRequest.onBeforeSendHeaders", "onBeforeSendHeaders")}}
, you'll see the modified version here.{{Compat}}
- -Extra notes on Chrome incompatibilities.
- -{{WebExtExamples("h2")}}
- -This API is based on Chromium's chrome.webRequest
API. This documentation is derived from web_request.json
in the Chromium code.
Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
-// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
Определение типа окна браузера для создания.
+Определение типа окна браузера для создания. -Значение данного типа strings
. Возможные значения:
"normal"
"popup"
"panel"
"detached_panel"
{{Compat}}
+> **Примечание:** Это API основано на API Chromium [`chrome.windows`](https://developer.chrome.com/extensions/windows#type-CreateType). Эта документация основана на [`windows.json`](https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/windows.json) из кода Chromium. +> +> Информация о совместимости Microsoft Edge предоставлена корпорацией Microsoft и включена здесь под лицензией Creative Commons Attribution 3.0 United States License. -{{WebExtExamples}}
- -This API is based on Chromium's chrome.windows
API. This documentation is derived from windows.json
in the Chromium code.
Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
-// Copyright 2015 The Chromium Authors. All rights reserved. + diff --git a/files/ru/mozilla/add-ons/webextensions/api/windows/index.html b/files/ru/mozilla/add-ons/webextensions/api/windows/index.html deleted file mode 100644 index 7e0e9296878c72..00000000000000 --- a/files/ru/mozilla/add-ons/webextensions/api/windows/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: windows -slug: Mozilla/Add-ons/WebExtensions/API/windows -translation_of: Mozilla/Add-ons/WebExtensions/API/windows ---- -{{AddonSidebar}}- -Взаимодействие с окнами браузера. Вы можете использовать этот API, чтобы получить информацию об открытых окнах, а также открывать, изменять и закрывать окна. Вы также можете обрабатывать события открытия, закрытия окна, и активировать события.
- -Types
- -
windowId
value that represents the absence of a browser window.windowId
value that represents the current window.Creates a new window.
-{{Compat}}
- -{{WebExtExamples("h2")}}
- -This API is based on Chromium's chrome.windows
API. This documentation is derived from windows.json
in the Chromium code.
Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
-// Copyright 2015 The Chromium Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --
Веб расширения разработаны с поддержкой совместимости с расширениями Chrome и Оперы на сколько это возможно. Расширения, написанные для этих браузеров, должны работать в Firefox с минимальными изменениями.
- -Всё же, Firefox на данный момент имеет поддержку только для ограниченного набора функций и API, поддержуемых в Chrome и Опере. Мы работаем над добавлением большей поддержки, но много функций пока ещё не поддерживаются и некоторые из них никогда не будут поддерживаться.
- -Эта статья перечисляет все функции и API, которые полностью поддерживаются в Firefox Developer Edition (на данный момент Firefox 47). Там где функция поддерживается частично, мы указали на проблемные места.
- -You should assume that features and APIs not listed here at all are not yet supported.
-applications
browser_action
default_locale
description
icons
manifest_version
name
page_action
version
web_accessible_resources
Firefox не поддерживает "устойчивое"
свойство. Фоновые скрипты остаются загруженными всё время.
Firefox не поддерживает:
- -global
_execute_browser_action
Firefox не поддерживает:
- -match_about_blank
Firefox не поддерживает:
- -Firefox не поддерживает:
- -chrome_style
Using options_ui
requires a valid value for the applications.gecko.id property.
Firefox не поддерживает следующие разрешения:
- -background
clipboardRead
clipboardWrite
geolocation
unlimitedStorage
Obviously, it doesn't support permissions for APIs that are themselves not supported.
- -Firefox does not support the following incognito (private browsing) modes:
- -split
setPopup()
are resolved relative to the caller document, rather than to the extension rootsetPopup()
are resolved relative to the caller document, rather than to the extension rootimport()
export()
onCreated
onRemoved
onChanged
onMoved
onChildrenReordered
onImportBegan
onImportEnded
BookmarkTreeNodeUnmodifiable
drag()
acceptDanger()
setShelfEnabled()
onDeterminingFilename
saveAs
option and values other than "GET"
for the method
option are not supported by download()
setUpdateUrlData()
onRequest
onRequestExternal
getExtensionTabs()
sendRequest()
onStateChanged
setDetectionInterval()
Additoinally, queryState()
always returns "active"
in Firefox, regardless of the current system idle state.
update()
byUser
data.getPackageDirectoryEntry()
reload()
requestUpdateCheck()
restart()
sendNativeMessage()
onBrowserUpdateAvailable
onConnectExternal
onInstalled
onMessageExternal
onRestartRequired
onStartup
onSuspend
onSuspendCanceled
onUpdateAvailable
managed
storage areasync
storage areagetBytesInUse()
.highlighted
and active
as the same, since Firefox has no concept of selecting multiple tabs.tabs
permission if you want to include url
in the queryInfo
parameter to tabs.query()
.In Firefox, relative URLs passed into tabs.executeScript()
or tabs.insertCSS()
are resolved relative to the current page URL. In Chrome, these URLs are resolved relative to the add-on's base URL. To work cross-browser, you can specify the path as an absolute URL, starting at the add-on's root, like this:
/path/to/script.js
- sendRequest()
getSelected()
onActiveChanged
onHighlightChanged
onSelectionChanged
onCreatedNavigationTarget
onTabReplaced
onAuthRequired
windowId
and tabId
"requestBody"
instruction in opt_extraInfoSpec
focused
option in create()
onFocusChanged
will trigger multiple times for a given focus change.We don't support the following APIs, but plan to, soon:
- -This doesn't mean that these are the only additional APIs we will support, but that they are our current priorities.
- -Firefox resolves URLs in injected CSS files relative to the CSS file itself, rather than to the page it's injected into.
- -Firefox does not support using alert() from background pages. Using alert(message)
from a background page will cause the Browser Console to be opened and both a line stating "alert() is not supported in background windows; please use console.log instead." and the message
will be output to the console.
Встраиваемый скрипт - это часть расширения, которая выполняется в контексте отдельной веб-страницы (в отличии от фоновых скриптов, выполняющихся в контексте целого браузера).
- -Фоновые скрипты имеют доступ ко всем методам WebExtension JavaScript APIs, но они не имеют доступа к контенту отдельных веб-страниц. Так что если вашему расширению необходимо взаимодействие с контентом веб-страницы, вам нужен встраиваемый скрипт.
- -Точно так же, как скрипты загружаемые веб-страницами, встраиваемый скрипт может читать и изменять контент веб-страницы, используя DOM API.
- -Встраиваемые скрипты имеют доступ только к небольшому подмножеству методов WebExtension API, но они могут взаимодействовать с фоновыми скриптами, используя систему передачи сообщений, таким образом опосредовано имея доступ ко всему WebExtension API.
- -Обратите внимание, что встраивание скриптов блокируется на следующих доменах:
- -Если вы попытаетесь встроить скрипт на страницы, находящиеся на вышеперечисленных доменах, у вас ничего не выйдет, и веб-страница сделает запись о CSP ошибке.
- -По причине того, что список запрещённых доменов включает в себя addons.mozilla.org, пользователи, которые попытаются испытать ваше расширение прямо на странице загрузки, могут посчитать, что расширение не работает! В связи с этим вы могли бы предоставить им соответствующее предупреждение или onboarding page чтобы немедленно переадресовать их с addons.mozilla.org.
-Значения, определённые в глобальной области видимости встраиваемого скрипта с помощью var foo
или window.foo = "bar"
могут исчезать по причине бага 1408996.
Загрузка встраиваемых скриптов на веб-страницу происходит следующими тремя способами:
- -content_scripts
ключ в manifest.json, вы можете запросить браузер загружать встраиваемый скрипт каждый раз, когда браузер загружает веб-страницу, чей URL совпадает с объявленными шаблонами.tabs.executeScript()
API, вы можете загружать встраиваемые скрипты в определённые вкладки когда захотите: например, в ответ на нажатие пользователя на browser action.Существует только одна глобальная область видимости для одного фрейма, для одного расширения. Это означает, что значения из одного встраиваемого скрипта могут быть доступны для другого встраиваемого скрипта, не зависимо от того, как встраиваемый скрипт был загружен на страницу.
- -Используя методы (1) и (2), вы можете загружать скрипты на страницы, чьи URL могут быть представлены, используя шаблон совпадения.
- -Используя метод (3), вы к тому же можете загружать скрипты на страницы вашего расширения, но вы не можете загружать скрипты на привилегированные страницы браузеры (например "about:debugging" или "about:addons").
- -Встраиваемые скрипты имеют доступ и могут изменять DOM на веб-странице, так же как и обычные скрипты. Так же они могут видеть любые изменения сделанные с DOM страничными скриптами.
- -При этом, встраиваемые скрипты имеют "чистое DOM представление". Это значит:
- -В Firefox это поведение называется Xray vision.
- -Например, рассмотрите эту веб-страницу:
- -<!DOCTYPE html> -<html> - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8" /> - </head> - - <body> - <script src="page-scripts/page-script.js"></script> - </body> -</html>- -
Скрипт "page-script.js" делает следующее:
- -// page-script.js - -// добавляет новый элемент к DOM -var p = document.createElement("p"); -p.textContent = "Этот параграф был добавлен страничным скриптом."; -p.setAttribute("id", "page-script-para"); -document.body.appendChild(p); - -// определяет новое свойство на объекте window -window.foo = "Эта глобальная переменная была добавлена страничным скриптом"; - -// переопределяет встроенную window.confirm() функцию -window.confirm = function() { - alert("Страничный скрипт так же переопределил 'confirm'"); -}- -
Теперь расширение загружает встраиваемый скрипт на страницу:
- -// content-script.js - -// получает доступ и изменяет DOM -var pageScriptPara = document.getElementById("page-script-para"); -pageScriptPara.style.backgroundColor = "blue"; - -// не может видеть свойств определённых страничным скриптом -console.log(window.foo); // undefined - -// видит изначальное значение свойства, переопределённого страничным скриптом -window.confirm("Вы уверены?"); // вызывает оригинальный window.confirm()- -
Те же самые правила применяются и наоборот: страничный скрипт не может видеть JavaScript свойств, добавленных встраиваемым скриптом.
- -Это означает, что встраиваемый скрипт может полагаться на то, что DOM свойства всегда будут вести себя предсказуемо, и не беспокоиться о том, что его переменные будут иметь конфликт с переменными из страничного скрипта.
- -Одно из последствий такого поведения состоит в том, что встраиваемый скрипт не будет иметь доступ к JavaScript библиотекам, загруженным страничным скриптом. Например, если веб-страница загружает jQuery, встраиваемый скрипт не сможет увидеть эту библиотеку.
- -Если встраиваемому скрипту необходимо использовать какую-либо JavaScript библиотеку, тогда эта библиотека должна быть загружена, тем же способом, как и встраиваемый скрипт вместе с ним:
- -"content_scripts": [ - { - "matches": ["*://*.mozilla.org/*"], - "js": ["jquery.js", "content-script.js"] - } -]- -
Примечание: Firefox предоставляет некоторое API, позволяющее встраиваемому скрипту иметь доступ к JavaScript объектам, созданным страничным скриптом, и предоставлять свои собственные JavaScript объекты страничному скрипту.
- -Смотрите совместное использование объектов со страничным скриптом для получения дополнительной информации.
-В дополнение стандартному DOM API, встраиваемый скрипт может использовать следующие методы WebExtension APIs:
- -Из extension
:
getURL()
inIncognitoContext
Из runtime
:
connect()
getManifest()
getURL()
onConnect
onMessage
sendMessage()
Из i18n
:
Из menus
:
getTargetElement
Ко всему из storage
.
Встраиваемые скрипты могут делать запросы используя window.XMLHttpRequest
и window.fetch()
API.
В Firefox, запросы, совершаемые из встраиваемого скрипта (например, используя fetch()) происходят в контексте расширения, так что вам необходимо предоставлять полный URL для доступа к контенту страниц. В Chrome, эти запросы совершаются в контексте страницы, так что URL может быть относительным, например /api
будет трансформирован в https://[current page URL]/api
.
Встраиваемый скрипт имеет точно такие же кросс-доменные привилегии, как и всё остальное расширение: так что если расширение запросило кросс-доменный доступ на какой-либо домен используя permissions
ключ в manifest.json, тогда его встраиваемый скрипт тоже будет иметь доступ к этому домену.
Это достигается, предоставляя встраиваемому скрипту более привилегированные XHR and fetch объекты. Что имеет побочный эффект, связанный с отсутствием Origin
и Referer
заголовков, которые имел бы запрос, выполняемый из страничного скрипта. Зачастую это предпочитаемо, для того чтобы предотвратить раскрытие кросс-доменной натуры запроса. Начиная с версии 58 и дальше, расширения, которым необходимо выполнять запросы, которые должны выглядеть будто они отправлены встраиваемым скриптом, могут использовать content.XMLHttpRequest
и content.fetch()
. Кросс-браузерные расширения должны проверять присутствие этих методов.
Хотя встраиваемые скрипты не могут напрямую использовать большинство методов из WebExtension APIs, они могут взаимодействовать с фоновыми скриптами расширения, используя систему сообщений, и таким образом могут опосредованно иметь доступ к тем же самым API, что и фоновые скрипты.
- -Существует два способа общения между фоновым и встраиваемым скриптами: вы можете посылать одиночные сообщения, ожидая необязательного ответа, или вы можете установить долгосрочное соединение на двух сторонах и использовать это соединение для обмена сообщениями.
- -Для отправки одиночного сообщения и ожидания необязательного ответа, вы можете использовать следующее API:
- -- | Во встраиваемом скрипте | -В фоновом скрипте | -
---|---|---|
Отправка сообщения | -browser.runtime.sendMessage() |
- browser.tabs.sendMessage() |
-
Получение сообщения | -browser.runtime.onMessage |
- browser.runtime.onMessage |
-
Например, представьте встраиваемый скрипт, который обрабатывает нажатие левой кнопки мыши на веб-странице.
- -Если нажатие было произведено по ссылке, встраиваемый скрипт отправляет сообщение фоновому скрипту со значение URL в ссылке:
- -// content-script.js - -window.addEventListener("click", notifyExtension); - -function notifyExtension(e) { - if (e.target.tagName != "A") { - return; - } - browser.runtime.sendMessage({"url": e.target.href}); -}- -
Фоновый скрипт ожидает эти сообщения и, при их получении, отображает уведомления, используя notifications
API:
// background-script.js - -browser.runtime.onMessage.addListener(notify); - -function notify(message) { - browser.notifications.create({ - "type": "basic", - "iconUrl": browser.extension.getURL("link.png"), - "title": "Вы нажали на ссылку!", - "message": message.url - }); -} -- -
(Этот пример кода частично взят из notify-link-clicks-i18n примера на GitHub.)
- -Отправка одиночных сообщений может стать довольно обременительной, если вы пересылаете много сообщений между встраиваемым и фоновым скриптами. Альтернативное решение в этой ситуации будет установить постоянное соединение между двумя скриптами, и использовать его для обмена сообщениями.
- -Каждая из сторон имеет runtime.Port
объект, который они могут использовать для обмена сообщениями.
Для создания постоянного соединения:
- -runtime.onConnect
tabs.connect()
(при соединении со встраиваемым скриптом); илиruntime.connect()
(при соединении с фоновым скриптом).Результатом вызова этих методов будет возвращение runtime.Port
объекта.
runtime.onConnect
методу передаётся аргумент, являющийся собственным портом этого скрипта, runtime.Port
объект.Как только обе стороны имеют порт, они могут:
- -runtime.Port.postMessage()
, иruntime.Port.onMessage()
Например, сразу после загрузки, нижерасположенный встраиваемый скрипт:
- -Port
в переменную myPort
myPort
myPort
для отправки сообщений на фоновый скрипт, когда пользователь нажимает левую кнопку мыши на документе// content-script.js - -var myPort = browser.runtime.connect({name:"port-from-cs"}); -myPort.postMessage({greeting: "Привет из встраиваемого скрипта"}); - -myPort.onMessage.addListener(function(m) { - console.log("Во встраиваемом скрипте, получено сообщение из фонового скрипта: "); - console.log(m.greeting); -}); - -document.body.addEventListener("click", function() { - myPort.postMessage({greeting: "Они кликнули по странице!"}); -});- -
Соответствующий фоновый скрипт:
- -portFromCS
portFromCS
, когда пользователь нажимает кнопку расширения в браузере// background-script.js - -var portFromCS; - -function connected(p) { - portFromCS = p; - portFromCS.postMessage({greeting: "Привет, встраиваемый скрипт!"}); - portFromCS.onMessage.addListener(function(m) { - console.log("В фоновом скрипте, получено сообщение от встраиваемого скрипта"); - console.log(m.greeting); - }); -} - -browser.runtime.onConnect.addListener(connected); - -browser.browserAction.onClicked.addListener(function() { - portFromCS.postMessage({greeting: "Они нажали кнопку!"}); -}); -- -
Если вы имеете несколько встраиваемых скриптов, с которыми вы обращаетесь в одно и то же время, вы бы могли сохранять каждое соединение в массиве.
- -// background-script.js - -var ports = [] - -function connected(p) { - ports[p.sender.tab.id] = p - //... -} - -browser.runtime.onConnect.addListener(connected) - -browser.browserAction.onClicked.addListener(function() { - ports.forEach(p => { - p.postMessage({greeting: "Они нажали на кнопку!"}) - }) -}); -- -
Хотя по умолчанию встраиваемые скрипты не имеют доступ к объектам, которые созданы страничными скриптами, они могут взаимодействовать со страничными скриптами, используя window.postMessage
и window.addEventListener
API.
Например:
- -// page-script.js - -var messenger = document.getElementById("from-page-script"); - -messenger.addEventListener("click", messageContentScript); - -function messageContentScript() { - window.postMessage({ - direction: "from-page-script", - message: "Сообщение со страницы" - }, "*");- -
// content-script.js - -window.addEventListener("message", function(event) { - if (event.source == window && - event.data && - event.data.direction == "from-page-script") { - alert("Встраиваемый скрипт получил сообщение: \"" + event.data.message + "\""); - } -});- -
Для просмотра законченного и полностью рабочего примера, посетите эту страницу на GitHub и следуйте инструкциям.
- -Заметьте, при взаимодействии с непроверенными страницами этим способом, вам нужно быть очень осторожными . Расширения имеют возможность запускать привилегированный код, который может обладать серьёзными возможностями, и вредоносные веб-страницы легко могут обмануть ваше расширение, ради доступа к этим возможностям.
- -Как простейший пример, представим встраиваемый скрипт, который получает сообщение от веб-страницы и делает что-то вроде этого:
- -// content-script.js - -window.addEventListener("message", function(event) { - if (event.source == window && - event.data.direction && - event.data.direction == "from-page-script") { - eval(event.data.message); - } -});- -
Теперь страничный скрипт может запускать любой код со всеми привилегиями встраиваемого скрипта.
-eval()
во встраиваемых скриптахВ Chrome, eval()
всегда выполняет код в контексте встраиваемого скрипта, а не в контексте веб-страницы.
В Firefox:
- -eval()
, код выполняется в контексте встраиваемого скрипта.window.eval()
, код выполняется в контексте страничного скрипта.Например, рассмотрите этот встраиваемый скрипт:
- -// content-script.js - -window.eval('window.x = 1;'); -eval('window.y = 2'); - -console.log(`Во встраиваемом скрипте, window.x: ${window.x}`); -console.log(`Во встраиваемом скрипте, window.y: ${window.y}`); - -window.postMessage({ - message: "check" -}, "*");- -
Этот код создаёт переменные x
and y
, используя window.eval()
и eval()
, затем записывает их значения, и отправляет сообщение на веб-страницу.
Получая сообщение, страничный скрипт записывает те же самые переменные:
- -window.addEventListener("message", function(event) { - if (event.source === window && event.data && event.data.message === "check") { - console.log(`In page script, window.x: ${window.x}`); - console.log(`In page script, window.y: ${window.y}`); - } -});- -
В Chrome, в консоли будут записаны следующие строки:
- -In content script, window.x: 1 -In content script, window.y: 2 -In page script, window.x: undefined -In page script, window.y: undefined- -
В Firefox, будут записаны следующие строки:
- -In content script, window.x: undefined -In content script, window.y: 2 -In page script, window.x: 1 -In page script, window.y: undefined- -
Те же правила применимы к setTimeout()
, setInterval()
, и Function()
.
Будьте очень осторожны, запуская код в контексте страничного скрипта. Окружение страничного скрипта может контролироваться потенциально зловредным веб-страницей, которая может переопределить объекты, с которыми вы взаимодействуете, так что их поведение станет совершенно непредсказуемым:
- -// page.js переопределяет console.log - -var original = console.log; - -console.log = function() { - original(true); -} -- - -
// content-script.js вызывает переопределённую версию - -window.eval('console.log(false)'); --
Политика защиты содержимого (англ. Content Security Policy) автоматически применяется ко всем расширениям, разработанным с использованием WebExtension API. Она ограничивает источники, из которых расширение может загружать <script> и <object> ресурсы, и препятствует потенциально опасным практикам, например использованию eval()
.
Статья в краткой форме объясняет значимость этой политики, каковы её изначальные правила, как они влияют на расширение, и как расширение может изменять эти правила.
-Политика защиты содержимого - это механизм, помогающий веб-сайтам предотвращать выполнение умышленно вредного кода. Веб-сайт устанавливает политику защиты, используя HTTP заголовок, посылаемый с сервера. Главным образом эта политика участвует в устанавливании допустимых источников для загрузки различного вида контента, к примеру, скриптов или встроенных плагинов. Например, веб-сайт может использовать политику защиты для инструктирования браузера, чтобы тот выполнял скрипты, загруженные только с самого сайта, а не из каких-либо других источников. Политика защиты содержимого так же может запретить браузеру использовать потенциально опасные практики, например использование eval().
- -Так же как веб-сайты, расширения могут загружать контент из различных источников. Например, всплывающее окно расширения определяется HTML документом, и может подключать JavaScript и CSS файлы из различных источников, точно так же, как и нормальная веб-страница:
- -<!DOCTYPE html> - -<html> - <head> - <meta charset="utf-8"> - </head> - - <body> - - <!-- Некоторый HTML контент --> - - <!-- - Подключение сторонней библиотеки. - Смотрите также https://developer.mozilla.org/ru/docs/Web/Security/Subresource_Integrity. - --> - <script> - src="https://code.jquery.com/jquery-2.2.4.js" - integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI=" - crossorigin="anonymous"> - </script> - - <!-- Include my popup's own script--> - <script src="popup.js"></script> - </body> - -</html>- -
В сравнении с веб-сайтами, расширения имеют доступ к дополнительному привилегированному API, так что вероятность получения к нему доступа сторонним кодом - это очень большой риск. По этой причине:
- -content_security_policy
ключ в manifest.json, но даже в этом случае существуют ограничения на возможные разрешения. Для дополнительной информации смотрите content_security_policy
.Следующие правила по защите содержимого являются изначальными:
- -"script-src 'self'; object-src 'self';"- -
Они применяются к любому расширению, которое самостоятельно не указывает свою политику защиты, используя content_security_policy
ключ в manifest.json. Это имеет следующие последствия:
Вы можете загружать только локальные к расширению <script> и <object> ресурсы.
-Расширению не разрешено выполнять код, представленный в виде JavaScript строк.
-Используя изначальную политику защиты содержимого, вы можете загружать только локальные к расширению <script> и <object> ресурсы. Например, рассмотрите эту строку из документа расширения:
- -<script src="https://code.jquery.com/jquery-2.2.4.js"></script>- -
Она не будет загружать запрашиваемый ресурс, и вы не сможете найти ни один ожидаемый от ресурса объект. К этой ситуации существует два решения:
- -Скачать этот ресурс, упаковать его в ваше расширение и ссылаться к нему локально.
-Использовать ключ content_security_policy
в manifest.json, чтобы позволить загрузку контента из вышеупомянутого источника..
Изначальная политика защиты содержимого не позволяет выполнять код из JavaScript строк. Это означает, что следующие примеры кода изначально запрещены:
- -eval("console.log('some output');");- -
window.setTimeout("alert('Hello World!');", 500);- -
var f = new Function("console.log('foo');");- -
Изначальная политика защиты содержимого не позволяет выполнять JavaScript-код, встраиваемый в HTML теги. Это запрещает как выполнение JavaScript-кода вложенного прямо в <script>
тег, так и выполнение вписанных в атрибут обработчиков событий, означая, что следующий код так же не будет работать:
<script>console.log("foo");</script>- -
<div onclick="console.log('click')">Click me!</div>- -
Вместо того, чтобы использовать код <body onload="main()">
для запуска вашего скрипта после загрузки страницы, поставьте обработчики событий на DOMContentLoaded или load.