1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
---
title: permissions
slug: Mozilla/Add-ons/WebExtensions/manifest.json/permissions
tags:
- Web-расширение
- Полномочия
- Расширение
translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/permissions
---
<p>{{AddonSidebar}}</p>
<table class="fullwidth-table standard-table">
<tbody>
<tr>
<th scope="row" style="width: 30%;">Тип</th>
<td><code>Массив</code></td>
</tr>
<tr>
<th scope="row">Обязателен</th>
<td>Нет</td>
</tr>
<tr>
<th scope="row">Пример</th>
<td>
<pre class="brush: json; no-line-numbers">
"permissions": [
"*://developer.mozilla.org/*",
"webRequest"
]</pre>
</td>
</tr>
</tbody>
</table>
<p>Используйте ключ<span style='font-family: "Times New Roman","serif"; font-size: 12.0pt; line-height: 115%;'> </span> <code>permissions</code> для получения дополнительных возможностей для вашего расширения. Значением ключа является массив строк, каждая из которых представляет собой запрос на какие-либо полномочия.</p>
<p>При объявлении запросов полномочий с помощью этого ключа, браузер проинформирует пользователей, о том какие полномочия необходимы расширению во время его установки, и задаст вопрос, согласны ли они выдать их расширению. Браузер так же даёт пользователям возможность изучить полномочия расширения уже после установки. Так как требование дополнительных полномочий может повлиять на желание пользователя использовать ваше расширение, решение использования конкретного функционала может стоить тщательного рассмотрения. К примеру, есть смысл избегать запрашивания необязательных полномочий, и предоставлять информацию о том, зачем вашему расширению нужны какие-либо полномочия в описании расширения. Более подробная информация о проблемах, которые вам стоит рассмотреть касательно этой темы, предоставлена в статье <a href="/ru/docs/Mozilla/Add-ons/WebExtensions/Request_the_right_permissions">Запрашивание правильных полномочий</a>.</p>
<p>Значение ключа может содержать три вида запросов полномочий:</p>
<ul>
<li>Запрос на полномочия для хоста</li>
<li>Запрос на API полномочия</li>
<li>Запрос на activeTab полномочия</li>
</ul>
<h2 id="Запрос_полномочий_для_хоста">Запрос полномочий для хоста</h2>
<p>Запрос на полномочия для хоста объявляется через <a href="https://developer.mozilla.org/ru/docs/Mozilla/Add-ons/WebExtensions/Match_patterns">шаблоны совпадения</a>, где каждый шаблон определяет группу URL, при посещении которых расширение будет иметь эти дополнительные полномочия. Например, запрос на полномочия для хоста может быть задан подобной строкой <code>"*://developer.mozilla.org/*"</code>.</p>
<p>Полномочия для хоста включают:</p>
<ul>
<li>Возможность выполнять <a href="/ru/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a> и <a href="/ru/docs/Web/API/Fetch_API">fetch</a> запросы на ресурсы, которые имеют заданный origin, не испытывая cross-origin ограничений (даже для запросов, выполняемых из встраиваемого скрипта)</li>
<li>Возможность встраивать скрипты программным путём, используя <a href="/ru/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript">tabs.executeScript</a>, на веб-страницах загруженных с заданного origin</li>
<li>Возможность обрабатывать события из <a href="/ru/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest</a> API для заданных хостов</li>
<li>Доступ к cookies на заданных хостах, используя <a href="/ru/Add-ons/WebExtensions/API/cookies">cookies</a> API, при условии получения дополнительного "cookies" API полномочия.</li>
<li>Возможность обходить защиту от слежения, при условии полностью указанного хоста, без использования универсального символа <code>*</code>. Не будет работать с <code><all_urls></code>.</li>
</ul>
<p>В Firefox, начиная с версии 56, расширения автоматически получают полномочия для своего собственного хоста, который имеет вид:</p>
<pre><code>moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/</code></pre>
<p>где <code>60a20a9b-1ad4-af49-9b6c-c64c98c37920</code> - внутреннее ID расширения. Расширение может получить это URL программным путём, через вызов метода <a href="/ru/docs/Mozilla/Add-ons/WebExtensions/API/extension/getURL">extension.getURL()</a>:</p>
<pre class="brush: js;">browser.extension.getURL("");
// moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/
</pre>
<h2 id="Запрос_на_API_полномочия">Запрос на API полномочия</h2>
<p>Запрос на API полномочия объявляется через ключевые слова, каждое из которых представляет собой название <a href="/ru/docs/Mozilla/Add-ons/WebExtensions/API">WebExtension API</a>, доступ к которому необходим расширению.</p>
<p>Следующие ключевые слова доступны на данный момент:</p>
<ul>
<li><code>activeTab</code></li>
<li><code>alarms</code></li>
<li><code>background</code></li>
<li><code>bookmarks</code></li>
<li><code>browserSettings</code></li>
<li><code>browsingData</code></li>
<li><code>clipboardRead</code></li>
<li><code>clipboardWrite</code></li>
<li><code>contentSettings</code></li>
<li><code>contextMenus</code></li>
<li><code>contextualIdentities</code></li>
<li><code>cookies</code></li>
<li><code>debugger</code></li>
<li><code>dns</code></li>
<li><code>downloads</code></li>
<li><code>downloads.open</code></li>
<li><code>find</code></li>
<li><code>geolocation</code></li>
<li><code>history</code></li>
<li><code>identity</code></li>
<li><code>idle</code></li>
<li><code>management</code></li>
<li><code>menus</code></li>
<li><code>menus.overrideContext</code></li>
<li><code>nativeMessaging</code></li>
<li><code>notifications</code></li>
<li><code>pageCapture</code></li>
<li><code>pkcs11</code></li>
<li><code>privacy</code></li>
<li><code>proxy</code></li>
<li><code>search</code></li>
<li><code>sessions</code></li>
<li><code>storage</code></li>
<li><code>tabHide</code></li>
<li><code>tabs</code></li>
<li><code>theme</code></li>
<li><code>topSites</code></li>
<li><code>unlimitedStorage</code></li>
<li><code>webNavigation</code></li>
<li><code>webRequest</code></li>
<li><code>webRequestBlocking</code></li>
</ul>
<p>В большинстве случаев полномочие просто делает возможным доступ к определённому API, за исключением следующих ситуаций:</p>
<ul>
<li><code>tabs</code> предоставляет доступ к <a href="/ru/Add-ons/WebExtensions/API/tabs">привилегированным частям <code>tabs</code> API</a>: <code>Tab.url</code>, <code>Tab.title</code>, and <code>Tab.faviconUrl</code>. В Firefox, вам так же понадобятся <code>tabs</code> полномочия, если вы собираетесь использовать <code>url</code> ключ в параметре <code>queryInfo</code> для <code><a href="/ru/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query">tabs.query()</a></code> метода. Весь остальной <code>tabs</code> API доступен без запрашивания каких-либо полномочий.</li>
<li><code>webRequestBlocking</code> позволяет вам использовать "blocking" аргумент, для возможности <a href="/ru/Add-ons/WebExtensions/API/WebRequest">изменять и отменять запросы</a>.</li>
<li><code>downloads.open</code> позволяет использовать {{WebExtAPIRef("downloads.open()")}} API.</li>
<li><code>tabHide</code> позволяет использовать {{WebExtAPIRef("tabs.hide()")}} API.</li>
</ul>
<h2 id="Запрос_на_activeTab_полномочия">Запрос на activeTab полномочия</h2>
<p>Этот вид запроса объявляется через ключевое слово <code>"activeTab"</code>. <code>activeTab</code> полномочия предоставляются расширению на активной в данный момент вкладке, и вступают в эффект только в момент, когда пользователь взаимодействует с расширением.</p>
<p>"Взаимодействие пользователя" включает:</p>
<ul>
<li>Пользователь нажимает на кнопку расширения на панели инструментов или адресной строке</li>
<li>Пользователь взаимодействует с контекстным меню расширения</li>
<li>Пользователь нажимает комбинацию клавиш, ассоциированную с расширением</li>
</ul>
<p>activeTab полномочия включают:</p>
<ul>
<li>Возможность программно встраивать JavaScript или CSS на страницу, используя <code><a href="/ru/Add-ons/WebExtensions/API/tabs/executeScript">browser.tabs.executeScript</a></code> и <code><a href="/ru/Add-ons/WebExtensions/API/tabs/insertCSS">browser.tabs.insertCSS</a></code></li>
<li>Получение доступа к привилегированным частям tabs API для активной вкладки: <code>Tab.url</code>, <code>Tab.title</code> и <code>Tab.faviconUrl</code>.</li>
</ul>
<p>Цель этих полномочий – позволить расширению выполнять наиболее распространенные сценарии работы, без необходимости выдавать ему более серьёзные привилегии, так как большинство расширений задумано для выполнения какой-либо работы на активной вкладке после взаимодействия с пользователем. Например, представьте расширение, которое встраивает скрипт на текущую страницу, после того как пользователь нажимает на кнопку расширения на панели инструментов. Если бы <code>activeTab</code> полномочий не существовало, расширению бы пришлось запрашивать <code><all_urls></code>. Но они бы давали расширению намного больше привилегий, чем ему было бы необходимо: расширение могло бы встраивать скрипты на любую вкладку и в любой момент, когда пожелает.</p>
<p>Заметьте, что вы сможете иметь доступ к привилегированному tab API, только на момент взаимодействия расширения с пользователем, и пока вкладка не изменила своё состояние. То есть расширение перестанет иметь данные привилегии при изменении адреса страницы или каком-либо другом событии с вкладкой.</p>
<p>Обычно вкладкой, получающей <code>activeTab</code> полномочия, является активная в данный момент вкладка, за исключением одного случая. <code><a href="/ru/docs/Mozilla/Add-ons/WebExtensions/API/menus">menus</a></code> API позволяет расширению создавать элементы контекстного меню, которые будут появляться непосредственно при нажатии на вкладку (элемент на панели вкладок, при нажатии на который изменяется активная вкладка). Если пользователь вызывает контекстное меню на этом элементе, тогда <code>activeTab</code> полномочия выдадутся для вкладки, по которой было произведено нажатие, несмотря на то, что она могла бы не является активной ({{bug(1446956)}} начиная с Firefox версии 63).</p>
<h2 id="Доступ_к_буферу_обмена">Доступ к буферу обмена</h2>
<p>Два полномочия предоставляют расширению привилегии для взаимодействия с буфером обмена:</p>
<ul>
<li><code>clipboardWrite</code>: для записи в буфер обмена с помощью {{DOMxRef("Clipboard.write()")}}, {{DOMxRef("Clipboard.writeText()")}}, <code>document.execCommand("copy")</code> или <code>document.execCommand("cut")</code></li>
<li><code>clipboardRead</code>: для чтения из буфера обмена с помощью {{DOMxRef("Clipboard.read()")}}, {{DOMxRef("Clipboard.readText()")}} или <code>document.execCommand("paste")</code></li>
</ul>
<p>Смотрите <a href="/ru/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipboard">Взаимодействие с буфером обмена</a> для более подробной информации.</p>
<h2 id="Неограниченное_хранилище">Неограниченное хранилище</h2>
<p>Полномочие <code>unlimitedStorage</code>:</p>
<ul>
<li>Позволяет расширению превышать любые ограничения размера хранимой информации для {{WebExtAPIRef("storage.local")}} API</li>
<li>В Firefox, позволяет расширению создавать <a href="/ru/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria#Firefox_specifics">"persistent" базу данных IndexedDB</a>, не запрашивая разрешения у пользователя в момент её создания.</li>
</ul>
<h2 id="Примеры">Примеры</h2>
<pre class="brush: json no-line-numbers"> "permissions": ["*://developer.mozilla.org/*"]</pre>
<p>Запрашивает полномочия для хостов, имеющих developer.mozilla.org в их URL.</p>
<pre class="brush: json no-line-numbers"> "permissions": ["tabs"]</pre>
<p>Запрашивает доступ к привилегированным частям <code>tabs</code> API.</p>
<pre class="brush: json no-line-numbers"> "permissions": ["*://developer.mozilla.org/*", "tabs"]</pre>
<p>Запрашивает несколько типов полномочий из примеров выше.</p>
<h2 id="Browser_compatibility">Browser compatibility</h2>
<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
<p>{{Compat("webextensions.manifest.permissions")}}</p>
|