aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/permissions/index.html
blob: 4fb4309cc26d769c4bf4babc3864c31d8fbe6a40 (plain)
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
---
title: 权限 - permissions
slug: Mozilla/Add-ons/WebExtensions/manifest.json/permissions
tags:
  - 权限
  - 附加组件
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 notranslate">
"permissions": [
  "*://developer.mozilla.org/*",
  "webRequest"
]</pre>
   </td>
  </tr>
 </tbody>
</table>

<p>使用permissions 关键字为你的扩展请求特殊的权限。该关键字为一个字符串数列,每个字符串请求一项权限。</p>

<p>如果你使用该关键字请求权限,浏览器可能会在安装该扩展时通知用户该扩展需求某些权限,并询问他们是否愿意给予这些权限。在插件安装之后浏览器也可能允许用户检查扩展的权限。因为要求授予权限可能会影响用户安装你的扩展的意愿,所以请求权限需要特别小心的考虑。举个例子,你想要避免请求不必要的权限,而且可以在你的扩展描述中提供你为何需要某些权限的信息。更多关于这个话题的描述你可以参考这篇提供的文章 <a href="/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Request_the_right_permissions">请求正确的权限</a></p>

<p>该关键字能够包含三种类型的权限:</p>

<ul>
 <li>主机权限</li>
 <li>API 权限</li>
 <li>活动标签权限</li>
</ul>

<h2 id="主机权限">主机权限</h2>

<p> 主机权限使用 <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns">match patterns </a>指定,扩展在每一个表达式指定的网址上请求额外权限。</p>

<p>额外权限包括:</p>

<ul>
 <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a><a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API">fetch</a> 用于访问无跨源限制的源文件(包括从content scripts发出的访问请求)</li>
 <li>以编程方式(使用 <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript">tabs.executeScript</a>)将脚本注入到来自源服务器(origins)提供的页面的功能。</li>
 <li>使用 <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest</a> 在其主机上获取消息的能力。</li>
 <li>使用 <a href="/en-US/Add-ons/WebExtensions/API/cookies">cookies</a> API 访问主机cookies的能力,只要 cookies api的权限也被请求。</li>
 <li>使用无通配符(*)的全域名会绕开跟踪保护机制,但不能与 <code>&lt;all_urls&gt;</code> 共用.</li>
</ul>

<p>Firefox浏览器,自56以后的版本,扩展都会自动获取其源的主机权限,如以下形式:</p>

<pre class="notranslate"><code>moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/</code></pre>

<p><code>60a20a9b-1ad4-af49-9b6c-c64c98c37920</code> 是扩展内部ID。编程时可使用 <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/extension/getURL">extension.getURL()</a> 来返回此URL路径:</p>

<ol>
 <li>
  <pre class="notranslate"><code>browser.extension.getURL("");
// </code><code>moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/</code></pre>
 </li>
</ol>

<h2 id="API_权限">API 权限</h2>

<p>API 权限有关键字指定,每个关键字标志着一类WebExtension API 能够被使用。</p>

<p>如下关键字是当前可用的:</p>

<ul>
 <li><code>activeTab</code></li>
 <li><code>alarms</code></li>
 <li><code>bookmarks</code></li>
 <li><code>browsingData</code></li>
 <li><code>browserSettings</code></li>
 <li><code>contextMenus</code></li>
 <li><code>contextualIdentities</code></li>
 <li><code>cookies</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>nativeMessaging</code></li>
 <li><code>notifications</code></li>
 <li><code>pkcs11</code></li>
 <li><code>privacy</code></li>
 <li><code>proxy</code></li>
 <li><code>sessions</code></li>
 <li><code>storage</code></li>
 <li><code>tabs</code></li>
 <li><code>theme</code></li>
 <li><code>topSites</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="/en-US/Add-ons/WebExtensions/API/tabs"><code>一部分特权API</code></a>: <code>Tab.url</code>, <code>Tab.title</code>, and <code>Tab.faviconUrl</code>。在Firefox中你也需要<code>tabs </code>来将queryInfo中的url参数加入 <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query">tabs.query()</a></code>. 剩余的<code>tabs</code> API能在不要求任何权限的情况被使用</li>
 <li><code>webRequestBlocking</code> 允许你是用“blocking”参数,所以你可以<a href="/en-US/Add-ons/WebExtensions/API/WebRequest"> 修改或取消requests</a>.</li>
 <li><code>downloads.open</code> 让你使用 {{WebExtAPIRef("downloads.open()")}} API.</li>
</ul>

<h2 id="活动标签权限">活动标签权限</h2>

<p>该权限被指定为<code>“activeTab”</code>。如果一个扩展拥有<code>activeTab</code>权限,当用户跟该扩展交互时,扩展仅在活动标签被赋予额外权限。</p>

<p>“用户交互”包括:</p>

<ul>
 <li>用户点击扩展的浏览器按钮或者页面按钮</li>
 <li>用户选择了扩展的上下文菜单</li>
 <li>用户敲击了扩展定义的快捷键</li>
</ul>

<p>额外特权包括:</p>

<ul>
 <li>插入JavaScript或者CSS的能力, 使用 <code><a href="/en-US/Add-ons/WebExtensions/API/tabs/executeScript">browser.tabs.executeScript</a></code><code><a href="/en-US/Add-ons/WebExtensions/API/tabs/insertCSS">browser.tabs.insertCSS</a></code></li>
 <li>为当前标签访问tabs API权限部分的能力,包括:Tab.url,Tab.title, 和Tab .faviconUrl。</li>
</ul>

<p>改权限的目的是为了在不给予扩展太多权限的情况下,使得扩展能够应付大部分情况。很多扩展需要在用户要求时,在当前页面做一些处理,比如,考虑一个扩展想要在用户点击一个浏览器按钮时在当前页面运行一个脚本,如果 activeTab 权限不存在,扩展将需要请求主机权限&lt;all_urls&gt;,但是这给予了扩展超过其需要的权限:现在它可以在任何任何时间标签页执行脚本任何次,而不是仅仅在活动标签而且仅仅回应用户的行为。</p>

<h2 id="剪贴板访问">剪贴板访问</h2>

<p>有两种权限使得WebExtentsion可以跟剪贴板交互:</p>

<ul>
 <li><code>clipboardWrite</code>: 使用<code>document.execCommand("copy")</code> 或<code>document.execCommand("cut")</code> 向剪贴板写入</li>
 <li><code>clipboardRead</code>: 使用 <code>document.execCommand("paste")</code> 从剪贴板读取</li>
</ul>

<p>查看 <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipboard">Interact with the clipboard</a> 获取更多</p>

<h2 id="无限制存储">无限制存储</h2>

<p><code>unlimitedStorage</code> 权限:</p>

<ul>
 <li>能使扩展突破{{WebExtAPIRef("storage.local")}} API设定的quota限制</li>
 <li>Firefox浏览器中,无须提示用户授权,便可帮助扩展创建永久保存的IndexedDB数据库 <a href="https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria#Firefox_specifics">"persistent" IndexedDB database</a></li>
</ul>

<dl>
</dl>

<h2 id="示例">示例</h2>

<pre class="brush: json notranslate"> "permissions": ["*://developer.mozilla.org/*"]</pre>

<p>请求 developer.mozilla.org 下的权限访问.</p>

<pre class="brush: json notranslate">  "permissions": ["tabs"]</pre>

<p>请求tabs API的权限需要部分的访问。</p>

<pre class="brush: json notranslate">  "permissions": ["*://developer.mozilla.org/*", "tabs"]</pre>

<p>请求以上两种访问。</p>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<p>本页的兼容列表是从结构化数据生成的。如果你想参与修改此数据,请参考 <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> 并发送pull 请求。</p>

<p>{{Compat("webextensions.manifest.permissions")}}</p>