diff --git a/files/zh-cn/mozilla/add-ons/index.html b/files/zh-cn/mozilla/add-ons/index.html index 13654edc96d0fb..7aa909874c2983 100644 --- a/files/zh-cn/mozilla/add-ons/index.html +++ b/files/zh-cn/mozilla/add-ons/index.html @@ -57,7 +57,7 @@
Addons.mozilla.org,俗称 「AMO」,是 Mozilla 官方的官方站点,方便开发者发布扩展组件和用户查找。通过上传附加组件到 AMO, 你可以加入我们的用户和开发者社区,为你的附加组件找到订阅者。
+Addons.mozilla.org,俗称「AMO」,是 Mozilla 官方的官方站点,方便开发者发布扩展组件和用户查找。通过上传附加组件到 AMO,你可以加入我们的用户和开发者社区,为你的附加组件找到订阅者。
你不一定需要在 AMO 上发布你的附加组件,但你的附加组件必须要经过 Mozilla 签名,否则用户不能安装它。
@@ -69,7 +69,7 @@在WebExtensions中这种按钮被称为浏览器行为按钮,它们可以像下面这样生成:
+在 WebExtensions 中这种按钮被称为浏览器行为按钮,它们可以像下面这样生成:
browser_action
被用来定义按钮。在这一节中我们将创建一个工具栏按钮的 WebExtension 。当用户单击按钮时,会打开一个https://developer.mozilla.org 的新标签页.
+在这一节中我们将创建一个工具栏按钮的 WebExtension。当用户单击按钮时,会打开一个https://developer.mozilla.org 的新标签页。
-首先,新建名为 "button"的文件夹, 在该文件夹下创建名为"manifest.json" 的文件,内容如下:
+首先,新建名为 "button"的文件夹,在该文件夹下创建名为"manifest.json" 的文件,内容如下:
{ @@ -45,13 +45,13 @@-一个简单的按钮
}
上面内容显示有一个名为“ background .js ”后台脚本,以及在“ icons ”文件夹下的浏览器行为按钮图标。
+上面内容显示有一个名为“background.js”后台脚本,以及在“icons”文件夹下的浏览器行为按钮图标。
接下来,在"buttons" 文件夹下创建 "icons" 文件夹,在该文件夹下存放下面的图标文件 :
+接下来,在"buttons" 文件夹下创建 "icons" 文件夹,在该文件夹下存放下面的图标文件:
我们有两个图标,大图标用于在高分辨率状态下显示。浏览器会自动选择合适的图标。
-接着,在附加组件的根目录下创建 "background.js"文件 , 内容如下:
+接着,在附加组件的根目录下创建 "background.js"文件 , 内容如下:
function openPage() { browser.tabs.create({ @@ -89,7 +89,7 @@一个简单的按钮
添加一个弹出菜单
-尝试在按钮上添加一个弹出菜单。 修改 "manifest.json"如下:
+尝试在按钮上添加一个弹出菜单。修改 "manifest.json"如下:
{ @@ -109,12 +109,12 @@-添加一个弹出菜单
}我们把原文件做了三处改变:
+我们把原文件做了三处改变:
"browser_style": true
, 使弹出样式看上去更像是浏览器的一部分。"default_popup": "popup/choose_page.html"
, 告诉浏览器按钮被单击时弹出菜单,菜单的内容则在"popup/choose_page.html"页面中."default_popup": "popup/choose_page.html"
, 告诉浏览器按钮被单击时弹出菜单,菜单的内容则在"popup/choose_page.html"页面中。现在我们要创建弹出菜单。新建名为 "popup" 的文件夹,然后在文件夹内创建"choose_page.html" 文件,该文件内容如下:
@@ -136,7 +136,7 @@你会发现这是一个普通的HTML页面,它包含三个 {{htmlelement("div")}}元素,在每个元素中有一个Mozilla页面地址。另外还包括一个 CSS文件和一个JavaScript文件,我们会在后面添加它们。
+你会发现这是一个普通的 HTML 页面,它包含三个 {{htmlelement("div")}}元素,在每个元素中有一个 Mozilla 页面地址。另外还包括一个 CSS 文件和一个 JavaScript 文件,我们会在后面添加它们。
在 "popup" 文件夹下,创建名为 "choose_page.css" 的文件,内容如下:
@@ -172,7 +172,7 @@在我们的脚本中,我们会监听单击的弹出项。首先检查单击的对象是否在给出的页面选择项中,如果不在,则不做任何处理;如果在,则从单击的页面选择项中获取URL地址,然后打开一个对应页面的新标签页。注意:我们在弹出脚本中使用WebExtension接口,和在后台脚本中使用接口一样。
+在我们的脚本中,我们会监听单击的弹出项。首先检查单击的对象是否在给出的页面选择项中,如果不在,则不做任何处理;如果在,则从单击的页面选择项中获取 URL 地址,然后打开一个对应页面的新标签页。注意:我们在弹出脚本中使用 WebExtension 接口,和在后台脚本中使用接口一样。
附加组件的结构最后看上去应该像下面这样:
@@ -194,7 +194,7 @@页面行为(Page actions) 类似浏览器行为,只是页面行为仅针对特定页面,而浏览器行为则全局有效。
-由于浏览器行为总是发生,而页面行为只在特定页面显示。所以页面行为按钮在URL地址栏中显示,而浏览器行为按钮则在浏览器工具栏中显示。
+由于浏览器行为总是发生,而页面行为只在特定页面显示。所以页面行为按钮在 URL 地址栏中显示,而浏览器行为按钮则在浏览器工具栏中显示。
后台脚本在一个被称为后台页面的特殊页面的上下文环境中运行。此环境为其提供了全局变量 window
,也提供了所有的标准 DOM API。
您也可以在扩展中包含HTML文档,这些文档不附加到某个预定义的用户界面组件。与您可能为侧边栏,弹出窗口或选项页面提供的文档不同,它们在manifest.json中没有条目。但是,他们也可以像在后台脚本那样拥有一样的权限去使用WebExtension API。
+您也可以在扩展中包含 HTML 文档,这些文档不附加到某个预定义的用户界面组件。与您可能为侧边栏,弹出窗口或选项页面提供的文档不同,它们在 manifest.json 中没有条目。但是,他们也可以像在后台脚本那样拥有一样的权限去使用 WebExtension API。
-你通常可以使用 {{WebExtAPIRef("windows.create()")}} 或 {{WebExtAPIRef("tabs.create()")}}加载一个页面.
+你通常可以使用 {{WebExtAPIRef("windows.create()")}} 或 {{WebExtAPIRef("tabs.create()")}}加载一个页面。
若想了解更多,请参考 扩展页面。
@@ -127,7 +127,7 @@内容脚本可以像普通脚本一样获取、操作页面的 DOM。
-与普通的页面内脚本不同,Content scripts可以:
+与普通的页面内脚本不同,Content scripts 可以:
内容脚本无法直接访问普通网页中的脚本,但是可以通过 window.postMessage()
API 来与之传递信息。
通常情况下,当我们讨论内容脚本时,我们通常指的是JavaScript,但是你也可以用同样的机制来注入 CSS 样式。
+通常情况下,当我们讨论内容脚本时,我们通常指的是 JavaScript,但是你也可以用同样的机制来注入 CSS 样式。
若想了解更多,请参考内容脚本。
网络可访问资源指的是像图片、HTML、CSS 和 JavaScript 一类在扩展中包含的资源文件,并且你可以在内容脚本和页面脚本中访问。这些网络可访问资源可以在页面脚本和内容脚本中通过使用特定的URI方案来引用。
+
网络可访问资源指的是像图片、HTML、CSS 和 JavaScript 一类在扩展中包含的资源文件,并且你可以在内容脚本和页面脚本中访问。这些网络可访问资源可以在页面脚本和内容脚本中通过使用特定的 URI 方案来引用。
举个例子来说,如果一个内容脚本想要把一些图片插入网页,你可以在扩展中引入它们并且使他们成为网络可访问资源。接下来,内容脚本就可以创建并追加包含 src
属性的 img 标签了。
若想了解更多,请参考 manifest.json 中相关条目的文档:web_accessible_resources。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/alarms/create/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/alarms/create/index.html index 704898ab04c5da..9cae6086aaa5f8 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/alarms/create/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/alarms/create/index.html @@ -15,13 +15,13 @@ ---创建一个新的alarm.
+创建一个新的 alarm.
browser.alarms.create( - name, // 可选的字符串(string)类型 - alarmInfo // 可选的对象(object)类型 + name, // 可选的字符串 (string) 类型 + alarmInfo // 可选的对象 (object) 类型 )@@ -29,25 +29,25 @@
name
{{optional_inline}}字符串(string)类型。
alarm的名称。默认为空的字符串。alarmInfo
{{optional_inline}}对象(object)类型
. 你可以对过它来指定什么时间alarm会开始触发,其值可以是一个具体的时间值或者是一个延时(从alarm设置开始)。为了让alarm能复现,需要指定periodInMinutes。
对象(object)类型
. 你可以对过它来指定什么时间 alarm 会开始触发,其值可以是一个具体的时间值或者是一个延时(从 alarm 设置开始)。为了让 alarm 能复现,需要指定 periodInMinutes
。
在Chrome浏览器上,除非附件以非打包(unpackaged)方式加载,alarm的创建每分钟不允许超过一次。如果附件尝试设置delayInMinutes
为小于1的值,alarm只能在到达1分钟之后才会触发,并且会变成每分钟触发一次。
在 Chrome 浏览器上,除非附件以非打包 (unpackaged) 方式加载,alarm 的创建每分钟不允许超过一次。如果附件尝试设置 delayInMinutes
为小于1的值,alarm 只能在到达1分钟之后才会触发,并且会变成每分钟触发一次。
alarmInfo对象
可以设置以下属性:
alarmInfo
对象可以设置以下属性:
when
{{optional_inline}}double类型
. alarm第一次触发的时间,值为自1970-01-01 00:00:00 UTC过去的毫秒数。请使用Date.now()来获取
1970-01-01 00:00:00 UTC到当前时间过去的毫秒数。如果你设置了when属性,请不要设置delayInMinutes属性。
double类型
。alarm 第一次触发的时间,值为自 1970-01-01 00:00:00 UTC 过去的毫秒数。请使用 Date.now()
来获取 1970-01-01 00:00:00 UTC
到当前时间过去的毫秒数。如果你设置了when属性,请不要设置 delayInMinutes 属性。delayInMinutes
{{optional_inline}}double类型
. alarm设置好到第一次触发之间的分钟数。如果你设置了delayInMinutes属性,请不要设置when属性。
double类型
. alarm 设置好到第一次触发之间的分钟数。如果你设置了 delayInMinutes
属性,请不要设置 when 属性。periodInMinutes
{{optional_inline}}double类型
. 如果设置此属性,alarm会从第一次触发开始每隔periodInMinutes分钟再次触发。如果你没有设置when及delayInMinutes属性,alarm会在alarm设置好之后periodInMinutes分钟第一次触发。如果periodInMinutes属性没有设置,则alarm只会触发一次。
double类型
. 如果设置此属性,alarm 会从第一次触发开始每隔 periodInMinutes
分钟再次触发。如果你没有设置when及delayInMinutes属性,alarm会在alarm设置好之后periodInMinutes分钟第一次触发。如果periodInMinutes属性没有设置,则alarm只会触发一次。在未来一个特定的时间运行的计划任务代码。这很像setTimeout()
和setInterval()
,不过这些函数仅可以按需使用而不能在后台页面工作。
想要使用这个API,您需要获取"alarms"的permission。
+想要使用这个 API,您需要获取"alarms"的permission。
index
{{optional_inline}}integer
. 该节点在父文件夹中的位置(从 0 开始)。url
{{optional_inline}}string
. 当用户单击书签时打开的URL。文件夹没有此属性。string
. 当用户单击书签时打开的 URL。文件夹没有此属性。title
string
. 该节点显示的文字。dateAdded
{{optional_inline}}此WebExtensions {{WebExtAPIRef("bookmarks")}} API允许一个附加组件和浏览器的书签系统交互和操作。您可以用它给页面加书签,获取已有的书签,以及编辑,移除和管理书签。
+此WebExtensions {{WebExtAPIRef("bookmarks")}} API 允许一个附加组件和浏览器的书签系统交互和操作。您可以用它给页面加书签,获取已有的书签,以及编辑,移除和管理书签。
-欲使用此API,一个附件组件必须请求"bookmarks" permission在它的manifest.json
文件当中。
欲使用此 API,一个附件组件必须请求"bookmarks" permission在它的manifest.json
文件当中。
id
另见用户界面组件中的浏览器动作章节。
@@ -26,7 +26,7 @@ImageData
对象(例如,来自一个 {{htmlelement("canvas")}} 元素)。{{Compat("webextensions.api.browserAction")}}
"Chrome兼容性"是从 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities 包含,使用WebExtChromeCompat宏。
+"Chrome 兼容性"是从 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities 包含,使用WebExtChromeCompat宏。
如果你需要更新此章节,编辑 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities,然后刷新查看更改。
"clipboardWrite"
权限,Chrome 版本需要 "clipboard"
权限。"clipboardWrite"
权限,Chrome 版本需要 "clipboard"
权限。additionalItems
参数。Cookies API中的大多数方法都将 Cookie
对象用作输入参数或用作返回值的一部分。例如调用 {{WebExtAPIRef("cookies.getAll()")}} 将会返回一个 Cookie
对象的数组。
Cookies API 中的大多数方法都将 Cookie
对象用作输入参数或用作返回值的一部分。例如调用 {{WebExtAPIRef("cookies.getAll()")}} 将会返回一个 Cookie
对象的数组。
在下面的例子中我们将会获取所有的 cookie ,然后 console.log()
出这些 Cookie
对象所对应的值。
在下面的例子中我们将会获取所有的 cookie,然后 console.log()
出这些 Cookie
对象所对应的值。
function logCookies(cookies) { for (cookie of cookies) { @@ -64,7 +64,7 @@举例
声明 -diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/cookies/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/cookies/index.html index 4011b4fe560b1e..9133e18884825a 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/cookies/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/cookies/index.html @@ -13,13 +13,13 @@这 API 是基于 Chromium 的
+chrome.cookies
API 的。 这个文档来自于 Chromium code 中的cookies.json
。这 API 是基于 Chromium 的
chrome.cookies
API 的。这个文档来自于 Chromium code 中的cookies.json
。Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
使用 WebExtensions 获取或设置 cookies, 并且在修改时能够获得通知。
-你需要在 manifest.json 文件中开启“cookies”API 权限,并且需要对应站点的 主机权限 才能设置指定站点的cookie。详细信息查看 cookie 权限.
+你需要在 manifest.json 文件中开启“cookies”API 权限,并且需要对应站点的 主机权限 才能设置指定站点的 cookie。详细信息查看 cookie 权限.
类型
为了使用这个API,插件必须在它的manifest中指定"cookies" API 权限,和它想要使用cookie的任何网站的 host 权限 。插件将能读取或写入host权限中所匹配的URL可以读取或写入的任何cookie。例如:
+为了使用这个 API,插件必须在它的 manifest 中指定"cookies" API 权限,和它想要使用 cookie 的任何网站的 host 权限 。插件将能读取或写入 host 权限中所匹配的 URL 可以读取或写入的任何 cookie。例如:
http://*.example.com/
拥有这个host权限的插件将可以:
+拥有这个 host 权限的插件将可以:
www.example.com
任意路径下的不安全cookie。www.example.com
任意路径下的不安全cookie。www.example.com
任意路径下的不安全 cookie。www.example.com
任意路径下的不安全 cookie。它不能:
www.example.com
的安全cookie。www.example.com
的安全 cookie。http://www.example.com/
拥有这个host权限的插件将可以:
+拥有这个 host 权限的插件将可以:
www.example.com
任意路径下的不安全cookie。.example.com
任意路径下的不安全cookie。www.example.com
任意路径下的安全和不安全cookie。.example.com
任意路径下的安全和不安全cookie。www.example.com
任意路径下的不安全 cookie。.example.com
任意路径下的不安全 cookie。www.example.com
任意路径下的安全和不安全 cookie。.example.com
任意路径下的安全和不安全 cookie。它不能:
foo.example.com
的cookie。foo.www.example.com
的cookie。foo.example.com
的 cookie。foo.www.example.com
的 cookie。*://*.example.com/
拥有这个host权限的插件将可以:
+拥有这个 host 权限的插件将可以:
www.example.com
任意路径下安全的和不安全的cookie。www.example.com
任意路径下安全的和不安全的 cookie。这个API 基于 Chromium 的 chrome.cookies
API. 这篇文档来源于Chromium 代码的 cookies.json
。
这个 API 基于 Chromium 的 chrome.cookies
API. 这篇文档来源于 Chromium 代码的 cookies.json
。
Microsoft Edge 兼容性数据由 Microsoft Corporation 提供,并包含在 Creative Commons Attribution 3.0 United States License.
{{WebExtAPIRef("downloads")}} API 的 download()
函数根据给出的URL和其他首选项下载一个文件。
{{WebExtAPIRef("downloads")}} API 的 download()
函数根据给出的 URL 和其他首选项下载一个文件。
url
使用HTTP或者HTTPS协议, 那么下载请求将会包含当前为该域名所设置的所有cookie。filename
和 saveAs
都已经指定,那么将会弹出“保存为” 对话框,并且默认名称显示为filename
.url
使用 HTTP 或者 HTTPS 协议,那么下载请求将会包含当前为该域名所设置的所有 cookie。filename
和 saveAs
都已经指定,那么将会弹出“保存为”对话框,并且默认名称显示为filename
.这是一个异步函数,其返回值为 Promise
.
allowHttpErrors
{{optional_inline}}boolean
,启用后即使遇到HTTP错误仍然继续下载。 例如,可以使用该标志下载服务错误页面。默认值为false
. 当设置为以下值时:
+ boolean
,启用后即使遇到 HTTP 错误仍然继续下载。例如,可以使用该标志下载服务错误页面。默认值为false
. 当设置为以下值时:
false
,遇到HTTP错误时下载会被取消。true
, 即使遇到HTTP错误也会继续下载,并且不会弹出HTTP服务错误报告。但是,如果下载失败的原因是文件相关,网络相关,用户相关,或者说其他错误,仍然会报错。 false
,遇到 HTTP 错误时下载会被取消。true
, 即使遇到 HTTP 错误也会继续下载,并且不会弹出 HTTP 服务错误报告。但是,如果下载失败的原因是文件相关,网络相关,用户相关,或者说其他错误,仍然会报错。 body
{{optional_inline}}string
,代表请求的内容。conflictAction
{{optional_inline}}filename
{{optional_inline}}string
,表示相对默认保存位置的文件路径——这里提供你希望文件保存的位置,和你想要使用的文件名。绝对路径,空路径,以及包含反向引用的路径 (../
) 会导致错误产生。 如果省略,该值将默认为已经提供给下载文件的文件名,并且直接保存到下载文件夹中。string
,表示相对默认保存位置的文件路径——这里提供你希望文件保存的位置,和你想要使用的文件名。绝对路径,空路径,以及包含反向引用的路径 (../
) 会导致错误产生。如果省略,该值将默认为已经提供给下载文件的文件名,并且直接保存到下载文件夹中。headers
{{optional_inline}}array
中的一系列 objects
表示与请求一起发送的额外HTTP请求头。每一个请求头表示为字典对象,包含有关键字 name
还有 value
或binaryValue
中的一个。 无法指定 XMLHttpRequest
和 fetch
禁止的请求头,但是 Firefox 70 之后允许使用Referer
请求头。尝试使用被禁止的请求头会产生一个错误。array
中的一系列 objects
表示与请求一起发送的额外 HTTP 请求头。每一个请求头表示为字典对象,包含有关键字 name
还有 value
或binaryValue
中的一个。无法指定 XMLHttpRequest
和 fetch
禁止的请求头,但是 Firefox 70 之后允许使用Referer
请求头。尝试使用被禁止的请求头会产生一个错误。incognito
{{optional_inline}}boolean
:如果被设置为 true,那么这次下载会建立一个隐私浏览会话。 这意味着它只会出现在当前打开的任意隐私窗口的下载管理器。boolean
:如果被设置为 true,那么这次下载会建立一个隐私浏览会话。这意味着它只会出现在当前打开的任意隐私窗口的下载管理器。method
{{optional_inline}}string
,表示url
使用HTTP[S] 协议时使用的HTTP方法。其值可能是 "GET" 或 "POST"。string
,表示url
使用 HTTP[S] 协议时使用的 HTTP 方法。其值可能是 "GET" 或 "POST"。saveAs
{{optional_inline}}一个boolean
指定是(true
)否(false
)提供一个文件选择对话框允许用户选择文件名。.
一个boolean
指定是 (true
) 否 (false
) 提供一个文件选择对话框允许用户选择文件名。.
如果该选项省略, 浏览器会根据用户对于该行为的偏好设置决定是否提供一个文件选择对话框 (在火狐这项设置标签在about:preferences里为"每次都问您要存到哪" ,或者about:config里 browser.download.useDownloadDir
)。
如果该选项省略,浏览器会根据用户对于该行为的偏好设置决定是否提供一个文件选择对话框 (在火狐这项设置标签在 about:preferences 里为"每次都问您要存到哪" ,或者 about:config 里 browser.download.useDownloadDir
)。
Note: 如果 saveAs
被设置为 true
,Firefox for Android 将会引发一个错误。 当 saveAs
为 false
或空时这个参数会被忽略.
Note: 如果 saveAs
被设置为 true
,Firefox for Android 将会引发一个错误。当 saveAs
为 false
或空时这个参数会被忽略。
url
一个 Promise
. 如果成功开始下载,promise会被新创建的{{WebExtAPIRef("downloads.DownloadItem")}} 的 id
填充。否则 promise 会被拒绝并产生一条{{WebExtAPIRef("downloads.InterruptReason")}}错误信息.
一个 Promise
. 如果成功开始下载,promise 会被新创建的{{WebExtAPIRef("downloads.DownloadItem")}} 的 id
填充。否则 promise 会被拒绝并产生一条{{WebExtAPIRef("downloads.InterruptReason")}}错误信息。
如果你使用 URL.createObjectURL() 下载由 JavaScript 创建的数据并且之后想要(使用 revokeObjectURL)撤销对象链接(并且强烈推荐这么做),你必须在下载完成后再这么做。监听 downloads.onChanged 事件来判断是否下载完成。
+如果你使用 URL.createObjectURL() 下载由 JavaScript 创建的数据并且之后想要 (使用 revokeObjectURL) 撤销对象链接 (并且强烈推荐这么做),你必须在下载完成后再这么做。监听 downloads.onChanged 事件来判断是否下载完成。
下面这段代码尝试下载一个example文件,同时指定文件名和保存位置,还有 uniquify
conflictAction
选项。
下面这段代码尝试下载一个 example 文件,同时指定文件名和保存位置,还有 uniquify
conflictAction
选项。
function onStartedDownload(id) { console.log(`Started downloading: ${id}`); @@ -107,7 +107,7 @@例子
Acknowledgements -这个 API 基于 Chromium的
+chrome.downloads
API.这个 API 基于 Chromium 的
chrome.downloads
API.diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/downloads/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/downloads/index.html index 34d6c012f8daeb..ecbc861773aa52 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/downloads/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/downloads/index.html @@ -75,7 +75,7 @@Functions
- {{WebExtAPIRef("downloads.drag()")}}
- 将下载的文件拖动到另一个应用程序。
- {{WebExtAPIRef("downloads.setShelfEnabled()")}}
-- 启用或禁用与当前浏览器配置文件关联的每个窗口底部的灰色架子。 只要至少一个扩展名已禁用该架子,它就会被禁用。
+- 启用或禁用与当前浏览器配置文件关联的每个窗口底部的灰色架子。只要至少一个扩展名已禁用该架子,它就会被禁用。
Events
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/find/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/find/index.html index 0b9a0819662ded..c60d4bad6e45fb 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/find/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/find/index.html @@ -7,7 +7,7 @@在网页中查找文本,并突出显示匹配项。
-要使用此API,您需要具有“查找” 权限。
+要使用此 API,您需要具有“查找” 权限。
功能
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/history/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/history/index.html index 1fd8f133898e34..731690f0b93d85 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/history/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/history/index.html @@ -16,7 +16,7 @@ ---{{AddonSidebar}}-使用
+history
API与浏览器历史记录进行交互。使用
history
API 与浏览器历史记录进行交互。注意:下载也被当做一个
@@ -31,14 +31,14 @@HistoryItem
对象。因此,history.onVisited
等事件也会被下载所触发。- 移除所有浏览器历史记录中的页面
-然而,用户可能多次访问单个页面,因此API中有访问集合“visits”的概念。所以,该API还可以做如下使用:
+然而,用户可能多次访问单个页面,因此 API 中有访问集合“visits”的概念。所以,该 API 还可以做如下使用:
-使用该API之前,扩展程序必须在其
+manifest.json
文件中获取history的许可。使用该 API 之前,扩展程序必须在其
manifest.json
文件中获取 history 的许可。类型
@@ -65,7 +65,7 @@方法
- {{WebExtAPIRef("history.addUrl()")}}
- 为浏览器历史记录添加一个指定页面的访问。
- {{WebExtAPIRef("history.deleteUrl()")}}
-- 移除浏览器历史记录中所有对指定URL的访问。
+- 移除浏览器历史记录中所有对指定 URL 的访问。
- {{WebExtAPIRef("history.deleteRange()")}}
- 移除指定时间段内对用户指定页面的访问。
- {{WebExtAPIRef("history.deleteAll()")}}
@@ -83,7 +83,7 @@事件
- 每次用户访问页面时会触发,并提供该页面的 {{WebExtAPIRef("history.HistoryItem")}} 数据。
- {{WebExtAPIRef("history.onVisitRemoved")}}
- -
@@ -95,7 +95,7 @@当一个URL被彻底从浏览器历史记录中移除时触发。
+当一个 URL 被彻底从浏览器历史记录中移除时触发。
浏览器兼容性
致谢 -diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/history/ontitlechanged/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/history/ontitlechanged/index.html index 10e63b975b957a..6a852d8ed49732 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/history/ontitlechanged/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/history/ontitlechanged/index.html @@ -7,11 +7,11 @@ ---该 API 基于Chromium的
+chrome.history
API。该文档由Chromium代码中的history.json
衍生而来。该 API 基于 Chromium 的
chrome.history
API。该文档由 Chromium 代码中的history.json
衍生而来。微软 Edge 兼容性数据由微软公司提供并包含在如下证书中—— Creative Commons Attribution 3.0 United States License.
{{AddonSidebar()}}-当document的标题更改时触发+当 document 的标题更改时触发-你可以使用 {{WebExtAPIRef("history.onVisited")}}去进行监听. However, the {{WebExtAPIRef("history.HistoryItem")}} that this event passes to its listener does not include the page title, because the page title is typically not known at the time+history.onVisited
is sent.你可以使用 {{WebExtAPIRef("history.onVisited")}}去进行监听。However, the {{WebExtAPIRef("history.HistoryItem")}} that this event passes to its listener does not include the page title, because the page title is typically not known at the timehistory.onVisited
is sent.diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/i18n/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/i18n/index.html index 814e7058923676..cd56461c1bcbaf 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/i18n/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/i18n/index.html @@ -7,10 +7,10 @@国际化扩展的函数。您可以使用这些 api 从与扩展打包在一起的本地化文件中获取本地化字符串,查找浏览器的当前语言,并查找其 Accept-Language header头的值。
-有关对扩展使用 i18n 的详细信息,请参阅:
+有关对扩展使用 i18n 的详细信息,请参阅:
-
@@ -29,7 +29,7 @@- Internationalization国际化: 使用 WebExtension i18n 系统的指南
+- Internationalization国际化:使用 WebExtension i18n 系统的指南
- Locale-Specific Message reference: 扩展在
messages.json
文件中提供特定于语言环境的字符串。 此网页介绍messages.json
方法
- {{WebExtAPIRef("i18n.getMessage()")}}
- 获取指定消息的本地化字符串。
- {{WebExtAPIRef("i18n.getUILanguage()")}}
-- 获取浏览器的用户界面语言。 这与返回首选的用户语言 {{WebExtAPIRef('i18n.getAcceptLanguages')}} 不同。
+- 获取浏览器的用户界面语言。这与返回首选的用户语言 {{WebExtAPIRef('i18n.getAcceptLanguages')}} 不同。
- {{WebExtAPIRef("i18n.detectLanguage()")}}
- 使用 Compact Language Detector属性检测所提供文本的语言。
@@ -50,7 +50,7 @@浏览器兼容性
这个 API 是基于 Chromium 的
-chrome.i18n
API,这个文档源自 Chromium 代码中的history.json
。微软 Edge 的兼容性数据由微软公司提供,并在这里收录在《知识共享3.0美国许可证》中。
+微软 Edge 的兼容性数据由微软公司提供,并在这里收录在《知识共享 3.0 美国许可证》中。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/idle/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/idle/index.html index 8ce760c025b26a..e862823e7d8164 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/idle/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/idle/index.html @@ -13,7 +13,7 @@找出用户系统何时处于空闲,锁定或活动状态。
-要使用此API,您需要具有“空闲”权限。
+要使用此 API,您需要具有“空闲”权限。
类型
@@ -48,9 +48,9 @@浏览器兼容性
确认 -此 API基于 Chromium 的
+chrome.idle
API。本文档源自 Chromium代码中的idle.json
。此 API 基于 Chromium 的
-chrome.idle
API。本文档源自 Chromium 代码中的idle.json
。Microsoft Edge 兼容性数据由 Microsoft Corporation提供,并包含在Creative Commons Attribution 3.0 United States License下。
+Microsoft Edge 兼容性数据由 Microsoft Corporation 提供,并包含在 Creative Commons Attribution 3.0 United States License 下。
@@ -86,7 +86,7 @@浏览器兼容性
-了解更多:
+了解更多:
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/index.html index a4691924476e5f..a31785e950c6cb 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/index.html @@ -9,7 +9,7 @@{{AddonSidebar}}-WebExtension JavaScript API 可以在附加组件的后台脚本和附加组件定义的任何浏览器动作或页面动作中使用。这里的部分API也可以通过附加组件的内容脚本访问(见内容脚本指南列表)。
+WebExtension JavaScript API 可以在附加组件的后台脚本和附加组件定义的任何浏览器动作或页面动作中使用。这里的部分 API 也可以通过附加组件的内容脚本访问(见内容脚本指南列表)。
要使用更强大的 API,您需要在您的 manifest.json 中申请权限。
@@ -42,7 +42,7 @@diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/menus/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/menus/index.html index 2ae4c8d9ad69a9..ebdb7de25adc4f 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/menus/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/menus/index.html @@ -14,19 +14,19 @@ -请注意,这不同于 Google Chrome 的扩展系统,它使用
-chrome
而非browser
名字空间,并且对异步函数使用回调而不是 promises。为辅助移植,Firefox 实现的 WebExtensions 支持chrome
和回调以及browser
和 promises。Mozilla 也写了一个 polyfill 使使用browser
和 promises 的代码能不经修改的在 Chrome 中使用:https://github.com/mozilla/webextension-polyfill。微软 Edge 使用
+browser
名字空间,但尚不支持基于 promise 的异步API。目前在 Edge 中,异步 API 必须使用回调。微软 Edge 使用
browser
名字空间,但尚不支持基于 promise 的异步 API。目前在 Edge 中,异步 API 必须使用回调。并非所有浏览器都支持这里的所有 API:详情见浏览器对 JavaScript API 的支持。
此API基于Chrome的“contextMenus”API构建,该API可让Chrome扩展程序将项目添加到浏览器的上下文菜单中。+browser.menus
API为Chrome的API添加了一些功能,特别是可以将项目添加到浏览器的“工具”菜单以及上下文菜单中。此 API 基于 Chrome 的“contextMenus”API 构建,该 API 可让 Chrome 扩展程序将项目添加到浏览器的上下文菜单中。-browser.menus
API 为 Chrome 的 API 添加了一些功能,特别是可以将项目添加到浏览器的“工具”菜单以及上下文菜单中。在Firefox 55之前,这个API最初也被命名为+contextMenus
,并且这个名字被保留为别名,所以你可以使用contextMenus
编写在Firefox和其他浏览器中工作的代码。在 Firefox 55 之前,这个 API 最初也被命名为-contextMenus
,并且这个名字被保留为别名,所以你可以使用contextMenus
编写在 Firefox 和其他浏览器中工作的代码。你需要拥有“menus”(或别名" contextMenus ")权限来使用此API。+你需要拥有“menus”(或别名" contextMenus ")权限来使用此 API。创建菜单项
-使用 {{WebExtAPIRef("menus.create()")}}方法创建一个菜单项。你需要传递一个包含条目选项的对象,它包括条目的id,类型,和需要显示出来的文本值。
+使用 {{WebExtAPIRef("menus.create()")}}方法创建一个菜单项。你需要传递一个包含条目选项的对象,它包括条目的 id,类型,和需要显示出来的文本值。
绑定一个监听器到{{WebExtAPIRef("contextMenus.onClicked")}}事件来监听你菜单项目的点击事件。此监听器会传递一个{{WebExtAPIRef("contextMenus.OnClickData")}},它包含该事件的详细信息。
@@ -34,20 +34,20 @@创建菜单项
-
- "normal":只显示为一个标签的菜单项
-- "checkbox":一个表示二进制状态的菜单项。 它在菜单项旁边显示一个复选标记。 点击该菜单项切换复选标记。监听器会被传递两个额外的属性:“checked”,指示当前是否被选中,以及“wasChecked”,指示在此点击事件发生前是否被选中。
-- "radio":表示一组选项之一的上下文菜单项。 类似于复选框,它也在菜单项旁边显示一个复选标记,监听它的监听器也会被传递“checked”和“wasChecked”。 但是,如果您创建多个单选项,则这些项目将作为一组单选:组内只能选择一项,点击菜单项来选中它。
+- "checkbox":一个表示二进制状态的菜单项。它在菜单项旁边显示一个复选标记。点击该菜单项切换复选标记。监听器会被传递两个额外的属性:“checked”,指示当前是否被选中,以及“wasChecked”,指示在此点击事件发生前是否被选中。
+- "radio":表示一组选项之一的上下文菜单项。类似于复选框,它也在菜单项旁边显示一个复选标记,监听它的监听器也会被传递“checked”和“wasChecked”。但是,如果您创建多个单选项,则这些项目将作为一组单选:组内只能选择一项,点击菜单项来选中它。
- "separator":用于分割菜单的分割线。
如果您创建了多个上下文菜单项目或多个工具菜单项目,则这些项目将被放置在子菜单中。 子菜单的父项将标有扩展名。 例如,下面是一个名为“Menu Demo”的扩展,添加了两个上下文菜单项:
+如果您创建了多个上下文菜单项目或多个工具菜单项目,则这些项目将被放置在子菜单中。子菜单的父项将标有扩展名。例如,下面是一个名为“Menu Demo”的扩展,添加了两个上下文菜单项:
图标
-如果你使用 "icons" manifest key 为你的扩展指定一个图标,你的菜单项的旁边就会显示一个指定的图标。浏览器会尝试在普通分辨率下使用16 x 16像素的图标,在高分辨率下使用32 x 32像素的图标:
+如果你使用 "icons" manifest key 为你的扩展指定一个图标,你的菜单项的旁边就会显示一个指定的图标。浏览器会尝试在普通分辨率下使用 16 x 16 像素的图标,在高分辨率下使用 32 x 32 像素的图标:
-你可以通过调用 {{WebExtAPIRef("menus.create()")}} 时指定icons选项来给子菜单项设置图标。
+你可以通过调用 {{WebExtAPIRef("menus.create()")}} 时指定 icons 选项来给子菜单项设置图标。
@@ -117,7 +117,7 @@类型
- {{WebExtAPIRef("contextMenus.ContextType")}}
- 菜单里可以出现的不同内容。可能的值有:"all", "audio", "browser_action", "editable", "frame", "image", "link", "page", "page_action", "password", "selection", "tab", "video".
- {{WebExtAPIRef("contextMenus.ItemType")}}
-- 菜单项的类别有: "normal", "checkbox", "radio", "separator".
+- 菜单项的类别有:"normal", "checkbox", "radio", "separator".
- {{WebExtAPIRef("contextMenus.OnClickData")}}
- 当菜单项被点击时发送的信息。
@@ -126,7 +126,7 @@属性
- {{WebExtAPIRef("contextMenus.ACTION_MENU_TOP_LEVEL_LIMIT")}}
-- 可以被添加进上下文菜单项的顶级扩展项的最大值,其ContextType可以是"browser_action" 或者 "page_action".
+- 可以被添加进上下文菜单项的顶级扩展项的最大值,其 ContextType 可以是"browser_action" 或者 "page_action".
函数
@@ -157,7 +157,7 @@浏览器兼容性
致谢 -此API基于Chromium的
+chrome.contextMenus
API. 此文档来自于Chromium代码中的context_menus.json
。此 API 基于 Chromium 的
chrome.contextMenus
API. 此文档来自于 Chromium 代码中的context_menus.json
。diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/proxy/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/proxy/index.html index d39cfcc37ee562..346c626e4696d8 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/proxy/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/proxy/index.html @@ -9,18 +9,18 @@-Warning
+ 不推荐使用 {{WebExtAPIRef("proxy.register()")}} 或者 {{WebExtAPIRef("proxy.unregister()")}} 方法使用 Proxy Auto-Configuration (PAC) file. 这个 API 将会在 Firefox 68 中废弃并且在 Firefox 71 中删除。
- 不推荐使用 {{WebExtAPIRef("proxy.register()")}} 或者 {{WebExtAPIRef("proxy.unregister()")}} 方法使用 Proxy Auto-Configuration (PAC) file. 这个 API 将会在 Firefox 68 中废弃并且在 Firefox 71中删除.使用proxy API来代理web请求。你可以使用
+{{WebExtAPIRef("proxy.onRequest")}}
事件监听器来拦截web请求,并且返回一个可以描述是否代理并且怎样代理它们的对象。使用 proxy API 来代理 web 请求。你可以使用
-{{WebExtAPIRef("proxy.onRequest")}}
事件监听器来拦截 web 请求,并且返回一个可以描述是否代理并且怎样代理它们的对象。{{WebExtAPIRef("proxy.onRequest")}}的好处在于,用于实现你拦截策略的代码在你的扩展的后台脚本运行,所以,它可以让
+WebExtension APIs
能够完全的访问你的扩展(举例来说,可以访问你扩展的storage
和像dns等类似的网络api){{WebExtAPIRef("proxy.onRequest")}}的好处在于,用于实现你拦截策略的代码在你的扩展的后台脚本运行,所以,它可以让
-WebExtension APIs
能够完全的访问你的扩展 (举例来说,可以访问你扩展的storage
和像 dns 等类似的网络 api)除了这个api,扩展也能够使用
+browserSettings.proxyConfig
属性来重新编辑你全局的proxy
设置除了这个 api,扩展也能够使用
-browserSettings.proxyConfig
属性来重新编辑你全局的proxy
设置Chrome浏览器提供了一个叫做
+'proxy'的
api扩展,它的功能跟这个api类似,在chrome的api中也可以用来实现一个拦截策略。
然而,Chrome 的API的设计跟这个API设计完全不同。因为这个API跟谷歌的proxy
的API完全不同, 这个API只能通过'browser'命名空间访问Chrome 浏览器提供了一个叫做
-'proxy'的
api 扩展,它的功能跟这个 api 类似,在 chrome 的 api 中也可以用来实现一个拦截策略。
然而,Chrome 的 API 的设计跟这个 API 设计完全不同。因为这个 API 跟谷歌的proxy
的 API 完全不同, 这个 API 只能通过'browser'命名空间访问如果你想用这个API你需要得到'
+proxy
'的permission.并且,如果你想拦截一个请求,你同样也需要当前拦截请求的url的 host permission。如果你想用这个 API 你需要得到'
proxy
'的permission.并且,如果你想拦截一个请求,你同样也需要当前拦截请求的 url 的 host permission。Types
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/connectnative/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/connectnative/index.html index f0c06c8bce9893..88b7b9e9b4d5dd 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/connectnative/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/connectnative/index.html @@ -7,23 +7,23 @@ ---{{AddonSidebar()}}-该方法能够把附加组件和用户计算机上的一个本地应用程序相连接.+该方法能够把附加组件和用户计算机上的一个本地应用程序相连接。-同时我们需要本地应用程序的名称作为参数. 当启动本地应用程序的时候会返回一个{{WebExtAPIRef("runtime.Port")}} 对象给调用者.+同时我们需要本地应用程序的名称作为参数。当启动本地应用程序的时候会返回一个{{WebExtAPIRef("runtime.Port")}} 对象给调用者。-之后可以通过该对象的 Port.onMessage() 和 Port.postMessage()方法来和本地应用程序进行信息交互.+之后可以通过该对象的 Port.onMessage() 和 Port.postMessage() 方法来和本地应用程序进行信息交互。-本地应用程序会一直运行直到退出, 除非调用了+Port.disconnect()
方法, 亦或创建该Port对象的页面被摧毁了. 一旦Port对象断开连接, 浏览器会给该进程几秒的时间以便安全优雅的退出和释放, 之后如果发现该进程没退出的话就直接暴力干掉.本地应用程序会一直运行直到退出,除非调用了Port.disconnect()
方法,亦或创建该 Port 对象的页面被摧毁了。一旦 Port 对象断开连接,浏览器会给该进程几秒的时间以便安全优雅的退出和释放,之后如果发现该进程没退出的话就直接暴力干掉。-更多信息, 请查看 Native messaging.
+更多信息,请查看 Native messaging.
语法
@@ -36,12 +36,12 @@参数
- -
application
- +
值类型为string
. 该参数的值为要连接的本地应用程序的名称. 必须要跟 native application's manifest file 中的"name"特性的值一致.值类型为string
. 该参数的值为要连接的本地应用程序的名称。必须要跟 native application's manifest file 中的"name"特性的值一致。返回值
-是一个 {{WebExtAPIRef('runtime.Port')}} 对象. 该对象是用来跟本地应用程序进行消息交互的.
+是一个 {{WebExtAPIRef('runtime.Port')}} 对象。该对象是用来跟本地应用程序进行消息交互的。
浏览器的兼容性
@@ -49,22 +49,22 @@浏览器的兼容性
示例
-本示例中连接了本地应用程序"ping_pong"并且启动了监听以便接收消息. 当用户单击浏览器上的操作按钮时它会发送一个本地应用程序的消息:
+本示例中连接了本地应用程序"ping_pong"并且启动了监听以便接收消息。当用户单击浏览器上的操作按钮时它会发送一个本地应用程序的消息:
/* -启动时, 连接"ping_pong"本地应用程序. +启动时,连接"ping_pong"本地应用程序。 */ var port =browser
.runtime.connectNative("ping_pong"); /* -监听(接收)来自"ping_pong"本地应用程序的消息. +监听 (接收) 来自"ping_pong"本地应用程序的消息。 */ port.onMessage.addListener((response) => { console.log("Received: " + response); }); /* -当浏览器上的单击操作被触发时, 发送一个消息给本地应用程序. +当浏览器上的单击操作被触发时,发送一个消息给本地应用程序。 */browser
.browserAction.onClicked.addListener(() => { console.log("Sending: ping"); @@ -77,7 +77,7 @@示例
该 API 是基于 Chromium 的
-chrome.runtime
API. 本文档采自 Chromium 代码中的runtime.json
.Microsoft Edge 的兼容性数据由微软公司提供, 并被列入以下许可证 Creative Commons Attribution 3.0 United States License.
+Microsoft Edge 的兼容性数据由微软公司提供,并被列入以下许可证 Creative Commons Attribution 3.0 United States License.
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/getmanifest/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/getmanifest/index.html index 882bcb49865ec7..9de680e152b9c1 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/getmanifest/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/getmanifest/index.html @@ -8,7 +8,7 @@ ---{{AddonSidebar()}}-该方法会获取一个完整的主文件 manifest.json , 并返回一个序列化后的 JSON 对象.+该方法会获取一个完整的主文件 manifest.json , 并返回一个序列化后的 JSON 对象。@@ -19,11 +19,11 @@语法
参数
-无.
+无。
返回值
-是一个能表示主文件所有信息的 JSON 对象.
+是一个能表示主文件所有信息的 JSON 对象。
浏览器兼容性
@@ -31,7 +31,7 @@浏览器兼容性
示例
-取得主文件中的 name 特性的值, 并输出到控制台:
+取得主文件中的 name 特性的值,并输出到控制台:
var manifest = browser.runtime.getManifest(); console.log(manifest.name);diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/index.html index 2a1b8cdd6c2a89..973187c604535a 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/index.html @@ -18,12 +18,12 @@该模块提供关于附加组件以及运行环境的信息。
-它提供一组消息通信API,允许你:
+它提供一组消息通信 API,允许你:
- 在附加组件的不同模块间通信。
- 和其它的附加组件通信。
-- 和native应用通信。
+- 和 native 应用通信。
Types
@@ -63,7 +63,7 @@Properties
- {{WebExtAPIRef("runtime.lastError")}}
- 当异步方法执行时发生了错误,它需要向其调用方报告时,该值会被设置。
- {{WebExtAPIRef("runtime.id")}}
-- 当前扩展的ID。
+- 当前扩展的 ID。
Functions
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/onconnect/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/onconnect/index.html index eded2716d092bb..b7f5ee066c5d66 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/onconnect/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/onconnect/index.html @@ -5,7 +5,7 @@ ---{{AddonSidebar()}}-当使用扩展处理或content script建立连接时触发.
+当使用扩展处理或 content script 建立连接时触发。
Syntax
@@ -14,15 +14,15 @@Syntax
browser.runtime.onConnect.hasListener(listener) -事件有三个方法:
+事件有三个方法:
- -
addListener(callback)
- 为 这个事件添加一个监听器.
+- 为 这个事件添加一个监听器。
- -
removeListener(listener)
- 停止监听这个事件.
+listener
参数就是要移除的监听器.- 停止监听这个事件。
listener
参数就是要移除的监听器。- -
hasListener(listener)
- 检查监听器是否已经注册到这个事件上. 如果已经监听,则返回
+true
否则返回false
.- 检查监听器是否已经注册到这个事件上。如果已经监听,则返回
true
否则返回false
.addListener 语法
@@ -170,11 +170,11 @@Examples
- - + - + @@ -204,7 +204,7 @@ Examples
-文本转语音功能仅限200个字符+文本转语音功能仅限 200 个字符diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/platformarch/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/platformarch/index.html index a4aa83bd70f103..a63a3ec409db78 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/platformarch/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/platformarch/index.html @@ -8,19 +8,19 @@ ---{{AddonSidebar()}}-当前浏览器所在的计算机的处理器架构.
+当前浏览器所在的计算机的处理器架构。
值类型
-该值的类型是字符串. 可能的值如下:
+该值的类型是字符串。可能的值如下:
- -
"arm"
- 标识平台基于 arm 架构.
+- 标识平台基于 arm 架构。
- -
"x86-32"
- 表示平台基于 x86 32-bit 架构.
+- 表示平台基于 x86 32-bit 架构。
- -
"x86-64"
- 表示平台基于 x86 64-bit 架构.
+- 表示平台基于 x86 64-bit 架构。
浏览器兼容性
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/platformos/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/platformos/index.html index 0b5ad300ebeed6..874afb22fad1d3 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/platformos/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/platformos/index.html @@ -8,11 +8,11 @@ ---{{AddonSidebar()}}-获取当前浏览器运行所在的操作系统.
+获取当前浏览器运行所在的操作系统。
值类型
-该值的类型是字符串. 可能的值如下:
+该值的类型是字符串。可能的值如下:
- diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/sendmessage/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/sendmessage/index.html index 2f104f7a32effe..d44fc42f7ef559 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/sendmessage/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/sendmessage/index.html @@ -13,7 +13,7 @@
"mac"
-
如果发送给其他扩展,则将参数
+extensionId
设置为其他扩展的ID。其他扩展的 {{WebExtAPIRef('runtime.onMessageExternal')}} 将会被触发。如果发送给其他扩展,则将参数
extensionId
设置为其他扩展的 ID。其他扩展的 {{WebExtAPIRef('runtime.onMessageExternal')}} 将会被触发。此接口不能给 content script 发消息,如果要给 content script 发消息,请使用 {{WebExtAPIRef('tabs.sendMessage')}}。
@@ -32,10 +32,10 @@参数
-
- -
extensionId
{{optional_inline}}- +
string
. 若你想要发给不同的扩展,这里传入接收方的扩展ID。The ID of the extension to send the message to. Include this to send the message to a different extension. If the intended recipient has set an ID explicitly using the applications key in manifest.json, thenextensionId
should have this value. Otherwise it should be have the ID that was generated for the intended recipient.string
. 若你想要发给不同的扩展,这里传入接收方的扩展 ID。The ID of the extension to send the message to. Include this to send the message to a different extension. If the intended recipient has set an ID explicitly using the applications key in manifest.json, thenextensionId
should have this value. Otherwise it should be have the ID that was generated for the intended recipient.- 若此省略此参数,则发送给自己的扩展。
- -
message
- +
any
. 任何可以序列化成JSON的东西。any
. 任何可以序列化成 JSON 的东西。options
{{optional_inline}}object
.@@ -47,33 +47,33 @@
参数
根据给出的参数不同,API遵循如下规则:
+根据给出的参数不同,API 遵循如下规则:
-
- 只有1个参数:将会被当做 message 发送给自己的扩展。
-- 有2个参数: +
- 只有 1 个参数:将会被当做 message 发送给自己的扩展。
+- 有 2 个参数:
-
- 若第二个参数符合下面的规则,将会被当做
-(message, options)
,将消息发送给自己的扩展:-
- 一个合法的配置对象(也就是说这个对象只包含options参数支持的属性)
+- 一个合法的配置对象(也就是说这个对象只包含 options 参数支持的属性)
- null
- undefined
- 否则,将会被当做
+(extensionId, message)。
消息将会给发送给extensionId
指定ID的扩展- 否则,将会被当做
(extensionId, message)。
消息将会给发送给extensionId
指定 ID 的扩展- 有3个参数:将会被当做
+(extensionId, message, options)
. 消息将会给发送给extensionId
指定ID的扩展- 有 3 个参数:将会被当做
(extensionId, message, options)
. 消息将会给发送给extensionId
指定 ID 的扩展-在Firefox 55之前,只给出2个参数时,规则会有所不同:
+在 Firefox 55 之前,只给出 2 个参数时,规则会有所不同:
Under the old rules, if the first argument was a string, it was treated as theextensionId
, with the message as the second argument. This meant that if you calledsendMessage()
with arguments like("my-message", {})
, then it would send an empty message to the extension identified by "my-message". Under the new rules, with these arguments you would send the message "my-message" internally, with an empty options object.Return value
-返回一个
+Promise
。若接收方响应,Promise将会变为 fulfilled 并且返回接收方响应的JSON对象(数字、字符串、数组、true/false都是合法的JSON对象)。否则,Promise会变为 fulfilled 但是不返回任何参数。如果发生了连接错误,Promise将会变为 rejected 并返回一个错误消息。返回一个
Promise
。若接收方响应,Promise 将会变为 fulfilled 并且返回接收方响应的 JSON 对象(数字、字符串、数组、true/false 都是合法的 JSON 对象)。否则,Promise 会变为 fulfilled 但是不返回任何参数。如果发生了连接错误,Promise 将会变为 rejected 并返回一个错误消息。Browser compatibility
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/sendnativemessage/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/sendnativemessage/index.html index e9ba6a0d018e51..2780f6903a6ec5 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/sendnativemessage/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/runtime/sendnativemessage/index.html @@ -12,7 +12,7 @@从 WebExtension 发送单条消息到 native application。
-它需要两个强制的参数:native application 的名字和要发送给它的JSON对象。浏览器将会加载 native application 然后发送这个消息。
+它需要两个强制的参数:native application 的名字和要发送给它的 JSON 对象。浏览器将会加载 native application 然后发送这个消息。
这是一个异步函数,返回一个
@@ -32,14 +32,14 @@Promise
对象。native application 发送的第一条消息将被当作sendNativeMessage()
的回复,并且 promise 将这个消息作为参数.。注意你不能使用 {{WebExtAPIRef("runtime.onMessage")}} 从应用获取回复:你必须使用回调函数来替代。参数
- -
application
- +
字符串类型。
native application的名字。它必须和 native application's manifest file中的‘name’字段一致。字符串类型。
native application 的名字。它必须和 native application's manifest file中的‘name’字段一致。- -
message
- +
对象类型。一个将要发送给
native application的JSON对象。对象类型。一个将要发送给
native application 的 JSON 对象。返回值
-一个
+Promise
对象。如果native application发送了一个回复,它将会填充回复的JSON对象作为参数。否则它不会填充参数。如果在native application连接期间发生了错误,promise将会被一个错误的消息拒绝。一个
Promise
对象。如果 native application 发送了一个回复,它将会填充回复的 JSON 对象作为参数。否则它不会填充参数。如果在 native application 连接期间发生了错误,promise 将会被一个错误的消息拒绝。浏览器兼容性
@@ -47,7 +47,7 @@浏览器兼容性
示例
-这是一个 background script ,当使用者点击浏览器的browser action时,它会发送 "ping" 消息到 "ping_pong" 应用并且把回复记录下来:
+这是一个 background script,当使用者点击浏览器的 browser action 时,它会发送 "ping" 消息到 "ping_pong" 应用并且把回复记录下来:
function onResponse(response) { console.log(`Received ${response}`); @@ -70,7 +70,7 @@
示例
Acknowledgements -diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/search/search/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/search/search/index.html index a2646e1485970c..0003b28f6228db 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/search/search/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/search/search/index.html @@ -7,11 +7,11 @@这个API 基于 Chromium 的
+chrome.runtime
API。 本文来自 Chromium 代码中的runtime.json
。这个 API 基于 Chromium 的
chrome.runtime
API。本文来自 Chromium 代码中的runtime.json
。微软 Edge 的兼容性数据由 Microsoft Corporation 提供,并且包含在这里基于 Creative Commons Attribution 3.0 United States License。
使用指定的搜索引擎或默认搜索引擎进行搜索。
-结果将显示在一个新的选项卡中,或者如果给出了tabId参数,则显示在由此标识的选项卡中。
+结果将显示在一个新的选项卡中,或者如果给出了 tabId 参数,则显示在由此标识的选项卡中。
要在扩展程序中使用此功能,您必须要求
-"search"
有明确许可.获取安装的搜索引擎, 请使用 {{WebExtAPIRef("search.get()")}}.
+获取安装的搜索引擎,请使用 {{WebExtAPIRef("search.get()")}}.
语法
@@ -25,14 +25,14 @@参数
searchProperties
- -
+
object
. 拥有以下属性的对象:
object
. 拥有以下属性的对象:
query
字符串
. 进行查询的内容。engine
{{optional_inline}}- -
+
字符串。
.搜索引擎的名称。 如果指定的搜索引擎名称不存在,该函数将引发错误。 如果省略此属性,则使用默认的搜索引擎。
字符串。
.搜索引擎的名称。如果指定的搜索引擎名称不存在,该函数将引发错误。如果省略此属性,则使用默认的搜索引擎。tabId
{{optional_inline}}- @@ -44,7 +44,7 @@
参数
返回值
-无.
+无。
浏览器兼容
@@ -52,7 +52,7 @@浏览器兼容
例子
-使用默认搜索引擎进行搜索。 结果显示在新选项卡中:
+使用默认搜索引擎进行搜索。结果显示在新选项卡中:
function search() { browser.search.search({ @@ -63,7 +63,7 @@-例子
browser.browserAction.onClicked.addListener(search);使用维基百科进行搜索。 结果显示在新选项卡中:
+使用维基百科进行搜索。结果显示在新选项卡中:
function search() { browser.search.search({ @@ -75,7 +75,7 @@-例子
browser.browserAction.onClicked.addListener(search);使用维基百科进行搜索。 结果将显示在活动选项卡中:
+使用维基百科进行搜索。结果将显示在活动选项卡中:
function search(tab) { browser.search.search({ diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/sessions/session/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/sessions/session/index.html index 8a105c70b3a3f8..030866828d6047 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/sessions/session/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/sessions/session/index.html @@ -11,14 +11,14 @@如果关闭窗口,则会话表示为{{WebExtAPIRef("windows.Window", "Window")}}对象:例如,由于用户单击“关闭窗口”按钮,或关闭了窗口中唯一打开的选项卡。
-请注意,不同的浏览器可能对会话何时为Tab和何时为Window有不同的想法。例如:
+请注意,不同的浏览器可能对会话何时为 Tab 和何时为 Window 有不同的想法。例如:
-
-- 在Chrome中,如果用户关闭包含多个标签的窗口,则会话将记录为“窗口”。如果用户关闭了仅包含一个选项卡的窗口,则该窗口将记录为一个选项卡。
-- 在Firefox中,如果用户关闭窗口(或该窗口中最后一个选项卡的选项卡),则将会话记录为窗口,如果用户关闭窗口中最后一个选项卡中的选项卡,则将会话记录为一个Tab。
+- 在 Chrome 中,如果用户关闭包含多个标签的窗口,则会话将记录为“窗口”。如果用户关闭了仅包含一个选项卡的窗口,则该窗口将记录为一个选项卡。
+- 在 Firefox 中,如果用户关闭窗口(或该窗口中最后一个选项卡的选项卡),则将会话记录为窗口,如果用户关闭窗口中最后一个选项卡中的选项卡,则将会话记录为一个 Tab。
打开的选项卡的Tab对象没有
+sessionId
。关闭选项卡时,它将具有一个sessionId
但没有选项卡id
。如果恢复了该标签页,它将获得一个新的标签页,id
并且会丢失sessionId
。打开的选项卡的 Tab 对象没有
sessionId
。关闭选项卡时,它将具有一个sessionId
但没有选项卡id
。如果恢复了该标签页,它将获得一个新的标签页,id
并且会丢失sessionId
。类型
@@ -26,9 +26,9 @@类型
@@ -41,13 +41,13 @@
- -
lastModified
- +
number
。选项卡或窗口关闭的时间,自epoch以来的毫秒数。number
。选项卡或窗口关闭的时间,自 epoch 以来的毫秒数。- -
tab
{{optional_inline}}- +
object
。如果对象表示关闭的选项卡,则此属性存在,并且将是{{WebExtAPIRef("tabs.Tab")}}对象。仅当扩展名具有“ tabs” 许可权时url
,它才会包含title
和。favIconUrl
object
。如果对象表示关闭的选项卡,则此属性存在,并且将是{{WebExtAPIRef("tabs.Tab")}}对象。仅当扩展名具有“tabs” 许可权时url
,它才会包含title
和。favIconUrl
window
{{optional_inline}}object
。如果对象表示一个关闭的窗口,则此属性存在并且将是{{WebExtAPIRef("windows.Window")}}对象。浏览器兼容性
致谢 -该API基于Chromium的
+chrome.sessions
API。该 API 基于 Chromium 的
-chrome.sessions
API。Microsoft Edge兼容性数据由Microsoft Corporation提供,并在此处包含在Creative Commons Attribution 3.0美国许可证下。
+Microsoft Edge 兼容性数据由 Microsoft Corporation 提供,并在此处包含在 Creative Commons Attribution 3.0 美国许可证下。
-//版权所有2015 The Chromium Authors。版权所有。 +//版权所有 2015 The Chromium Authors。版权所有。 // //以或不以源代码和二进制格式重新分发和使用 //修改,只要满足以下条件 @@ -59,7 +59,7 @@浏览器兼容性
//版权声明,此条件列表和以下免责声明 //在随附的文档和/或其他材料中 //分配。 -// *无论是Google Inc.的名称还是Google Inc.的名称 +// *无论是 Google Inc.的名称还是 Google Inc.的名称 //贡献者可用于认可或宣传由 //此软件未经事先特别书面许可。 // diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/storage/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/storage/index.html index 36cd51e7a213c9..a0fcd2489b92b7 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/storage/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/storage/index.html @@ -13,11 +13,11 @@ -此存储系统API基于 Web Storage API, 并有少许不同。
+此存储系统 API 基于 Web Storage API, 并有少许不同。
-为了使用该API,您需要在manifest.json文件包含"storage"权限。每一个浏览器扩展有自己的储存区域,每一个储存区域又分为几种不同的存储类型。
+为了使用该 API,您需要在manifest.json文件包含"storage"权限。每一个浏览器扩展有自己的储存区域,每一个储存区域又分为几种不同的存储类型。
-虽然此API类似于{{domxref("Window.localStorage")}},但仍建议您不要在插件中使用
+Window.localStorage。当用户由于隐私原因清除历史浏览记录及数据时,火狐会将在浏览器扩展使用
localStorage API存储的数据一并清除。而使用storage.localAPI存储的数据将会恰当保留。
虽然此 API 类似于{{domxref("Window.localStorage")}},但仍建议您不要在插件中使用
Window.localStorage。当用户由于隐私原因清除历史浏览记录及数据时,火狐会将在浏览器扩展使用
localStorage API 存储的数据一并清除。而使用storage.localAPI存储的数据将会恰当保留。
类型
@@ -30,7 +30,7 @@类型
属性
-storage有3个属性,每一个代表不同的存储区域。
+storage 有 3 个属性,每一个代表不同的存储区域。
- {{WebExtAPIRef("storage.sync")}}
@@ -45,7 +45,7 @@事件
- {{WebExtAPIRef("storage.onChanged")}}
-- 当storage有数据变化时,此事件将被触发。
+- 当 storage 有数据变化时,此事件将被触发。
浏览器兼容性
@@ -53,22 +53,22 @@浏览器兼容性
{{Compat("webextensions.api.storage")}}
--"Chrome不兼容"这部分来源于 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities 使用WebExtChromeCompat macro.
+"Chrome 不兼容"这部分来源于 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities 使用WebExtChromeCompat macro.
如果需要更新这部分,请编辑 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities, 然后刷新页面即可看见所做更改。
在Edge中的不兼容
+在 Edge 中的不兼容
-Promises在Edge中不被支持,使用callbacks代替。
+Promises 在 Edge 中不被支持,使用 callbacks 代替。
{{WebExtExamples("h2")}}
Acknowledgements -这个API基于Chromium的
+chrome.storage
API. 这篇文档也来源于Chromium 代码中的storage.json
.这个 API 基于 Chromium 的
-chrome.storage
API. 这篇文档也来源于 Chromium 代码中的storage.json
.Microsoft Edge的适配数据由Microsoft Corporation提供并且被包含在Creative Commons Attribution 3.0 United States License许可证下.
+Microsoft Edge 的适配数据由 Microsoft Corporation 提供并且被包含在 Creative Commons Attribution 3.0 United States License 许可证下。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/create/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/create/index.html index d48e9bc0be4e39..6630c4c2f718d4 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/create/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/create/index.html @@ -13,7 +13,7 @@新建一个 tab.
-这是一个异步函数,返回
+Promise
.这是一个异步函数,返回
Promise
.语法
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/index.html index c56f813aa01892..ffd9dda7cfb076 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/index.html @@ -18,12 +18,12 @@与浏览器标签系统进行交互。
-你可以使用该API获取一个已打开标签的列表并且使用各种标准过滤标签,并进行 打开, 刷新,移动,重载,移除操作。该API不能直接访问标签中的主机内容,但是你可以使用 {{WebExtAPIRef("tabs.executeScript()")}} 或者 {{WebExtAPIRef("tabs.insertCSS()")}} APIs,来插入javascript和CSS。
+你可以使用该 API 获取一个已打开标签的列表并且使用各种标准过滤标签,并进行 打开,刷新,移动,重载,移除操作。该 API 不能直接访问标签中的主机内容,但是你可以使用 {{WebExtAPIRef("tabs.executeScript()")}} 或者 {{WebExtAPIRef("tabs.insertCSS()")}} APIs,来插入 javascript 和 CSS。
-你可以在不需要任何特殊权限的情况下使用该APIS的大部分, 除了:
+你可以在不需要任何特殊权限的情况下使用该 APIS 的大部分,除了:
-
@@ -54,7 +54,7 @@- 获取
+Tab.url
,Tab.title
, andTab.favIconUrl
, 你需要拥有 "tabs" 权限. 在火狐,这也意味着你需要 "tabs" ,来通过URL使用 {{WebExtAPIRef("tabs.query", "query")}}。- 获取
Tab.url
,Tab.title
, andTab.favIconUrl
, 你需要拥有 "tabs" 权限. 在火狐,这也意味着你需要 "tabs" ,来通过 URL 使用 {{WebExtAPIRef("tabs.query", "query")}}。- 使用 {{WebExtAPIRef("tabs.executeScript()")}} 或者 {{WebExtAPIRef("tabs.insertCSS()")}} 你必须在目标标签拥有 host permission 。
属性
- {{WebExtAPIRef("tabs.TAB_ID_NONE")}}
-- 给予非浏览器标签的一个特殊ID值 (比如,在开发工具中的标签)。
+- 给予非浏览器标签的一个特殊 ID 值(比如,在开发工具中的标签)。
方法
@@ -87,9 +87,9 @@方法
- {{WebExtAPIRef("tabs.highlight()")}}
- 高亮显示一个或多个标签。
- {{WebExtAPIRef("tabs.insertCSS()")}}
-- 向一个页面注入CSS。
+- 向一个页面注入 CSS。
- {{WebExtAPIRef("tabs.removeCSS()")}}
-- 移除之前调用{{WebExtAPIRef("tabs.insertCSS()")}} 注入的一个css。
+- 移除之前调用{{WebExtAPIRef("tabs.insertCSS()")}} 注入的一个 css。
- {{WebExtAPIRef("tabs.move()")}}
- 移动一个或多个标签页到同一窗口的一个新的位置或是到不同窗口。
- {{WebExtAPIRef("tabs.query()")}}
@@ -99,9 +99,9 @@方法
- {{WebExtAPIRef("tabs.remove()")}}
- 关闭一个或多个标签。
- {{WebExtAPIRef("tabs.sendMessage()")}}
-- 向一个指定标签的content script 发送单个消息。
+- 向一个指定标签的 content script 发送单个消息。
- {{WebExtAPIRef("tabs.sendRequest()")}} {{deprecated_inline}}
-- 向一个指定标签的content script 发送一个单一请求。 过时: 请使用 {{WebExtAPIRef("tabs.sendMessage()")}} 替代。
+- 向一个指定标签的 content script 发送一个单一请求。 过时: 请使用 {{WebExtAPIRef("tabs.sendMessage()")}} 替代。
- {{WebExtAPIRef("tabs.setZoom()")}}
- 缩放指定标签。
- {{WebExtAPIRef("tabs.setZoomSettings()")}}
@@ -116,7 +116,7 @@Events
- {{WebExtAPIRef("tabs.onActivated")}}
- 当窗口活动标签改变时触发,注意当该消息触发时,标签地址可能没有被设置。
- {{WebExtAPIRef("tabs.onActiveChanged")}} {{deprecated_inline}}
-- 已过时: 请使用 {{WebExtAPIRef("tabs.onActivated")}} 代替。
+- 已过时: 请使用 {{WebExtAPIRef("tabs.onActivated")}} 代替。
- {{WebExtAPIRef("tabs.onAttached")}}
- 当一个标签被附加到一个窗口时触发,因为他可能在窗口间移动。
- {{WebExtAPIRef("tabs.onCreated")}}
@@ -124,7 +124,7 @@Events
- {{WebExtAPIRef("tabs.onDetached")}}
- 当一个标签脱离一个窗口时被触发。
- {{WebExtAPIRef("tabs.onHighlightChanged")}} {{deprecated_inline}}
-- 过时: 请使用 {{WebExtAPIRef("tabs.onHighlighted")}} 代替。
+- 过时: 请使用 {{WebExtAPIRef("tabs.onHighlighted")}} 代替。
- {{WebExtAPIRef("tabs.onHighlighted")}}
- 当一个标签被高亮显示或是被选中时触发。
- {{WebExtAPIRef("tabs.onMoved")}}
@@ -134,7 +134,7 @@Events
- {{WebExtAPIRef("tabs.onReplaced")}}
- 当一个标签因为预载取代另一个标签时被触发。
- {{WebExtAPIRef("tabs.onSelectionChanged")}} {{deprecated_inline}}
-- 以过时: 请使用 {{WebExtAPIRef("tabs.onActivated")}} 代替。
+- 以过时: 请使用 {{WebExtAPIRef("tabs.onActivated")}} 代替。
- {{WebExtAPIRef("tabs.onUpdated")}}
- 当一个标签被更新时触发。
- {{WebExtAPIRef("tabs.onZoomChange")}}
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/insertcss/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/insertcss/index.html index 8466557459606e..cc7131b27d0d91 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/insertcss/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/insertcss/index.html @@ -2,18 +2,18 @@ title: tabs.insertCSS() slug: Mozilla/Add-ons/WebExtensions/API/tabs/insertCSS tags: - - 注入CSS + - 注入 CSS translation_of: Mozilla/Add-ons/WebExtensions/API/tabs/insertCSS ---{{AddonSidebar()}}-向一个页面注入CSS
+向一个页面注入 CSS
-使用该API前你必须拥有目标页面的权限, 可以是 主机权限, 或者使用 activeTab 权限.
+使用该 API 前你必须拥有目标页面的权限,可以是 主机权限, 或者使用 activeTab 权限.
-你只能向符合 match pattern 的网页注入CSS: 其形式必定是 "http", "https", "file", "ftp" 之一. 你不能向任何浏览器内置页面注入CSS, 比如 about:debugging, about:addons, 或者你打开的一个新的空白页。
+你只能向符合 match pattern 的网页注入 CSS: 其形式必定是 "http", "https", "file", "ftp" 之一。你不能向任何浏览器内置页面注入 CSS,比如 about:debugging, about:addons, 或者你打开的一个新的空白页。
-当再次调用{{WebExtAPIRef("tabs.removeCSS()")}} 时,已经注入的CSS可能会被清除。
+当再次调用{{WebExtAPIRef("tabs.removeCSS()")}} 时,已经注入的 CSS 可能会被清除。
这是一个返回
@@ -29,19 +29,19 @@Promise
的异步函数。参数
@@ -47,9 +47,9 @@
- -
tabId
{{optional_inline}}- +
integer,
将要注入css的标签ID。默认为当前窗口的活动标签。integer,
将要注入 css 的标签 ID。默认为当前窗口的活动标签。details
- {{WebExtAPIRef('extensionTypes.InjectDetails')}}. 对注入的描述,包含以下属性:
- -
allFrames
{{optional_inline}}- +
boolean
. 如果为真,该CSS会被注入到该页面的所有框架,如果为假,Css只会注入到最顶层框架,默认为假。boolean
. 如果为真,该 CSS 会被注入到该页面的所有框架,如果为假,Css 只会注入到最顶层框架,默认为假。code
{{optional_inline}}string
. 将要注入的代码。- -
file
{{optional_inline}}- +
string
. 包含将要注入代码的文件路径,在Firefox中,相对URLs 决定于当前页面的URL,在Chrome中,决定于扩展的基础URL。为了跨浏览器工作,你应该使用一个从扩展根目录开始的绝对路径,比如 :"/path/to/stylesheet.css"
.string
. 包含将要注入代码的文件路径,在 Firefox 中,相对 URLs 决定于当前页面的 URL,在 Chrome 中,决定于扩展的基础 URL。为了跨浏览器工作,你应该使用一个从扩展根目录开始的绝对路径,比如 :"/path/to/stylesheet.css"
.- -
frameId
{{optional_inline}}- +
integer
. CSS应该被注入的框架. 默认为0
(顶层框架).integer
. CSS 应该被注入的框架。默认为0
(顶层框架).matchAboutBlank
{{optional_inline}}boolean
. Iftrue
, the code will be injected into embedded "about:blank" and "about:srcdoc" frames if your add-on has access to their parent document. The code cannot be inserted in top-level about: frames. Defaults tofalse
.- @@ -52,7 +52,7 @@
runAt
{{optional_inline}}参数
Return value
-+
Promise
将会在CSS成功注入时 被填充,如果有任何错误发生,promise将会被注入一个错误消息。
Promise
将会在 CSS 成功注入时 被填充,如果有任何错误发生,promise 将会被注入一个错误消息。Browser compatibility
@@ -60,7 +60,7 @@Browser compatibility
例子
-下面例子将通过字符串变量形式向当前活动标签注入一段CSS代码
+下面例子将通过字符串变量形式向当前活动标签注入一段 CSS 代码
var css = "body { border: 20px dotted pink; }"; @@ -74,7 +74,7 @@-例子
insertingCSS.then(null, onError); });下面例子将以通过加载文件形式向页面注入CSS。CSS被注入在ID为2的tab中。
+下面例子将以通过加载文件形式向页面注入 CSS。CSS 被注入在 ID 为 2 的 tab 中。
browser.browserAction.onClicked.addListener(() => { @@ -90,7 +90,7 @@-例子
致谢 -diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/onactivated/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/onactivated/index.html index ad1e077394e16d..25284b79692e6d 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/onactivated/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/onactivated/index.html @@ -14,7 +14,7 @@本页 API 以谷歌 Chromium的
+chrome.tabs
API为基础. 该篇文档由Chromium 代码tabs.json
衍变而来.本页 API 以谷歌 Chromium 的
chrome.tabs
API 为基础。该篇文档由 Chromium 代码tabs.json
衍变而来。Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
语法
browser.tabs.onActivated.hasListener(listener)此事件有三个方法:
+此事件有三个方法:
activeInfo
- -
tabId
- +
integer
. 被激活的标签的ID。integer
. 被激活的标签的 ID。- -
windowId
- +
integer
. 此标签的窗体的ID。integer
. 此标签的窗体的 ID。浏览器兼容性
@@ -58,7 +58,7 @@浏览器兼容性
示例
-监听并记录标签激活事件:
+监听并记录标签激活事件:
function handleActivated(activeInfo) { console.log("Tab " + activeInfo.tabId + diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/query/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/query/index.html index e621ff00f0cde7..d2912efdefcfe1 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/query/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/query/index.html @@ -1,5 +1,5 @@ --- -title: 选项卡. 查询 () +title: tabs.query() slug: Mozilla/Add-ons/WebExtensions/API/tabs/query translation_of: Mozilla/Add-ons/WebExtensions/API/tabs/query original_slug: Mozilla/Add-ons/WebExtensions/API/tabs/查询 diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/sendmessage/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/sendmessage/index.html index 0ccfc4395acc7d..23fb5ab88e8d27 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/sendmessage/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/sendmessage/index.html @@ -5,9 +5,9 @@ ---{{AddonSidebar()}}-从background scripts中发送单个消息 (or other privileged scripts, such as popup scripts or options page scripts) 到任何content scripts that belong to the extension and are running in the specified tab.
+从 background scripts 中发送单个消息 (or other privileged scripts, such as popup scripts or options page scripts) 到任何 content scripts that belong to the extension and are running in the specified tab.
-这个消息将被content scripts中 {{WebExtAPIRef("runtime.onMessage")}} 事件的所有监听者收到,然后它们可以选择通过使用
+sendResponse
这个方法发送一个response到background scripts。这个消息将被 content scripts 中 {{WebExtAPIRef("runtime.onMessage")}} 事件的所有监听者收到,然后它们可以选择通过使用
sendResponse
这个方法发送一个 response 到 background scripts。This is an asynchronous function that returns a
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/tab/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/tab/index.html index b3cd3000f1a1f0..dec4a69d47aad2 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/tab/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/tabs/tab/index.html @@ -20,54 +20,54 @@Promise
.类型
- -
active
- +
boolean
. 该标签页是否在其窗口中处于活动状态。即使标签的窗口当前没有被关注,也可能是true。boolean
. 该标签页是否在其窗口中处于活动状态。即使标签的窗口当前没有被关注,也可能是 true。audible
{{optional_inline}}boolean
. 如果标签页没有静音:标签页是否正在发出声音。如果标签页被静音:如果没有静音标签页是否会发出声音。autoDiscardable
{{optional_inline}}boolean
. 资源不足时浏览器是否可以自动丢弃该标签页。- -
cookieStoreId
{{optional_inline}}- -
string
. 该标签页的Cookie存储. 如果不同的标签可以有不同的cookie存储 (例如, 支持 contextual identity), you can pass this as thestoreId
option into various methods of the {{WebExtAPIRef("cookies")}} API, 设置和获取与此标签页的Cookie存储关联的Cookie。 只有在扩展名具有“cookies”权- +
string
. 该标签页的Cookie存储. 如果不同的标签可以有不同的cookie存储 (例如, 支持 contextual identity), 你可以将此作为storeId
选项传递给 {{WebExtAPIRef("cookies")}} API的各种方法, 设置和获取与此标签页的Cookie存储关联的Cookie。 只有在扩展具有“cookies”权限的情况下才会出现.- +
string
. 该标签页的 Cookie 存储。如果不同的标签可以有不同的 cookie 存储 (例如,支持 contextual identity), you can pass this as thestoreId
option into various methods of the {{WebExtAPIRef("cookies")}} API, 设置和获取与此标签页的 Cookie 存储关联的 Cookie。只有在扩展名具有“cookies”权string
. 该标签页的 Cookie 存储。如果不同的标签可以有不同的 cookie 存储 (例如,支持 contextual identity), 你可以将此作为storeId
选项传递给 {{WebExtAPIRef("cookies")}} API 的各种方法,设置和获取与此标签页的 Cookie 存储关联的 Cookie。只有在扩展具有“cookies”权限的情况下才会出现。discarded
{{optional_inline}}boolean
. 是否丢弃的标签页。被丢弃的标签页是其内容已经从内存中卸载的标签页,但在标签页条中仍可见。它的内容在下一次被激活时被重新加载。- -
favIconUrl
{{optional_inline}}- +
string
. 该标签的图标的网址。 只有在扩展具有“cookies”权限的情况下才会出现. 如果标签页正在加载中,该值可以为空字符串string
. 该标签的图标的网址。只有在扩展具有“cookies”权限的情况下才会出现。如果标签页正在加载中,该值可以为空字符串height
{{optional_inline}}integer
. 标签页的像素单位高度。highlighted
boolean
. 标签页是否突出显示。- -
id
{{optional_inline}}- +
integer
. 标签页的ID. 标签 ID在浏览器的会话中是唯一的 。 在浏览器窗口中不包含内容的标签页 (例如, devtools 窗口),标签 ID 也可以设置为 {{WebExtAPIRef('tabs.TAB_ID_NONE')}} 。integer
. 标签页的 ID. 标签 ID 在浏览器的会话中是唯一的。在浏览器窗口中不包含内容的标签页 (例如,devtools 窗口),标签 ID 也可以设置为 {{WebExtAPIRef('tabs.TAB_ID_NONE')}} 。incognito
boolean
. 该标签页是否在隐私浏览窗口中。index
integer
. 窗口中的标签页从零开始的索引。- -
isArticle
- +
boolean
. 如果标签页可以在 Reader模式下呈现,则返回true,否则返回false。boolean
. 如果标签页可以在 Reader 模式下呈现,则返回 true,否则返回 false。- -
isInReaderMode
- +
boolean
. 如果标签页正在 Reader模式下呈现,则返回true,否则返回false。boolean
. 如果标签页正在 Reader 模式下呈现,则返回 true,否则返回 false。lastAccessed
double
. 上次访问该标签页的时间 , 参考 milliseconds since the epoch.mutedInfo
{{optional_inline}}- {{WebExtAPIRef('tabs.MutedInfo')}}.标签页的当前静音状态以及上次状态更改的原因。
- -
openerTabId
{{optional_inline}}- +
integer
. 打开此标签页的标签页ID(如果有)。如果开启者标签页仍然存在,该属性才会出现。integer
. 打开此标签页的标签页 ID(如果有)。如果开启者标签页仍然存在,该属性才会出现。pinned
boolean
. 标签页是否被固定selected
{{deprecated_inline}}boolean
.标签页是否被选中- -
sessionId
{{optional_inline}}- +
string
. 从{{WebExtAPIRef('sessions')}} API 获取的标签页的唯一标识会话ID.string
. 从{{WebExtAPIRef('sessions')}} API 获取的标签页的唯一标识会话 ID.status
{{optional_inline}}string
.加载 或 完成.- -
title
{{optional_inline}}- +
string
. 标签页的标题. 只有当扩展具有"tabs"
权限 时才会出现.string
. 标签页的标题。只有当扩展具有"tabs"
权限 时才会出现。- -
url
{{optional_inline}}- +
string
. 该选项卡正在显示的文档的URL。只有当扩展具有"tabs"
权限 时才会出现.string
. 该选项卡正在显示的文档的 URL。只有当扩展具有"tabs"
权限 时才会出现。width
{{optional_inline}}integer
. 标签页的像素单位宽度。- -
windowId
- +
integer
. 包含此标签页的窗口ID。integer
. 包含此标签页的窗口 ID。浏览器兼容性
@@ -78,9 +78,9 @@浏览器兼容性
感谢 -此 API 基于 Chromium的
+chrome.tabs
API. 本文档来源于Chromium 代码中的tabs.json
.此 API 基于 Chromium 的
-chrome.tabs
API. 本文档来源于 Chromium 代码中的tabs.json
.Microsoft Edge兼容性数据由Microsoft Corporation提供,并包含在Creative Commons Attribution 3.0美国许可证下。
+Microsoft Edge 兼容性数据由 Microsoft Corporation 提供,并包含在 Creative Commons Attribution 3.0 美国许可证下。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/webnavigation/ondomcontentloaded/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/webnavigation/ondomcontentloaded/index.html index 3beb10d7813fce..ecbe414561c6b7 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/webnavigation/ondomcontentloaded/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/webnavigation/ondomcontentloaded/index.html @@ -10,7 +10,7 @@ ---{{AddonSidebar()}}-在页面中触发DOMContentLoaded 事件时触发。此时,文档被加载和解析,并且DOM被完全构造,但链接的资源(例如图像,样式表和子框架(subframes))可能尚未被加载。
+在页面中触发DOMContentLoaded 事件时触发。此时,文档被加载和解析,并且 DOM 被完全构造,但链接的资源(例如图像,样式表和子框架(subframes))可能尚未被加载。
Syntax
@@ -22,15 +22,15 @@Syntax
browser.webNavigation.onDOMContentLoaded.hasListener(listener) -事件有三个方法:
+事件有三个方法:
- -
addListener(callback)
- 为此事件添加监听方法.
+- 为此事件添加监听方法。
- -
removeListener(listener)
- 停止监听此事件.
+listener
参数为需要移出的监听方法.- 停止监听此事件。
listener
参数为需要移出的监听方法。- -
hasListener(listener)
- 检测是否有
+listener
被注册在事件上. 如果有返回true
, 否则返回false
.- 检测是否有
listener
被注册在事件上。如果有返回true
, 否则返回false
.addListener syntax
@@ -40,16 +40,16 @@参数
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/webrequest/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/webrequest/index.html index 03b5823878ea5a..f5e1e01ea724ea 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/webrequest/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/webrequest/index.html @@ -16,57 +16,57 @@ ---
callback
- -
为当此事件发生是需要被调用的函数. 该函数将传递以下参数:
+为当此事件发生是需要被调用的函数. 该函数将传递以下参数:
filter
{{optional_inline}}- -
+
object
. 包含单个属性url
的对象, 这是一个 {{WebExtAPIRef("events.UrlFilter")}} 数组对象. 如果包含此参数,则该事件将仅触发转换为与数组中至少一个UrlFilter
匹配的URL。 在数组中。如果您省略此参数,则该事件将触发所有转换。
object
. 包含单个属性url
的对象, 这是一个 {{WebExtAPIRef("events.UrlFilter")}} 数组对象. 如果包含此参数,则该事件将仅触发转换为与数组中至少一个UrlFilter
匹配的 URL。在数组中。如果您省略此参数,则该事件将触发所有转换。{{AddonSidebar}}-为发出的HTTP请求在不同阶段添加事件监听器。事件监听器可以接收到请求的详细信息,也可以修改或取消请求。+为发出的 HTTP 请求在不同阶段添加事件监听器。事件监听器可以接收到请求的详细信息,也可以修改或取消请求。概况
每个事件都会在请求的特定阶段触发。事件的顺序大概是这样的:
-在请求过程中的任意时间,{{WebExtAPIRef("webRequest.onErrorOccurred", "onErrorOccurred")}} 可以被触发。虽然有时候触发的事件顺序不同,举个例子,在火狐浏览器中的HSTS过程,在onBeforeRequest事件执行后,onBeforeRedirect 事件会被立即触发。
+在请求过程中的任意时间,{{WebExtAPIRef("webRequest.onErrorOccurred", "onErrorOccurred")}} 可以被触发。虽然有时候触发的事件顺序不同,举个例子,在火狐浏览器中的 HSTS 过程,在 onBeforeRequest 事件执行后,onBeforeRedirect 事件会被立即触发。
所有的事件,接受
onErrorOccurred事件
,addListener()
有三个参数 :-
- 监听本身
-- 一个{{WebExtAPIRef("webRequest.RequestFilter", "filter")}} 对象, 所以你仅可以被特定请求或特定的资源类型提醒
-- 一个可选的
+extraInfoSpec
对象. 你可以使用这个对象添加特定的事件命令- 一个{{WebExtAPIRef("webRequest.RequestFilter", "filter")}} 对象,所以你仅可以被特定请求或特定的资源类型提醒
+- 一个可选的
extraInfoSpec
对象。你可以使用这个对象添加特定的事件命令这个监听函数接收一个
+details
对象,这个对象包含这个请求的信息。他包含一个请求ID, 在插件中这个ID可以关联唯一个请求事件. 这个ID是浏览器会话和插件上下文中唯一的。他始终在同一个请求中,贯穿着转发和授权等事件中。这个监听函数接收一个
-details
对象,这个对象包含这个请求的信息。他包含一个请求 ID, 在插件中这个 ID 可以关联唯一个请求事件。这个 ID 是浏览器会话和插件上下文中唯一的。他始终在同一个请求中,贯穿着转发和授权等事件中。在一个给定的主机上使用webRequest API, 你必须有这个主机的相关权限,包括"webRequest" API permission 和 host permission. 为了使用 "blocking" 特性,你必须有 "webRequestBlocking" API 权限。
+在一个给定的主机上使用 webRequest API, 你必须有这个主机的相关权限,包括"webRequest" API permission 和 host permission. 为了使用 "blocking" 特性,你必须有 "webRequestBlocking" API 权限。
-这个webRequest API不能让你进入一些安全敏感的请求,比如update checks and OCSP checks.
+这个 webRequest API 不能让你进入一些安全敏感的请求,比如update checks and OCSP checks.
Modifying requests
-在下边这些事件中,你可以修改请求. 比如一些特别的操作:
+在下边这些事件中,你可以修改请求。比如一些特别的操作:
-
- 取消请求: +
- 取消请求:
-
- {{WebExtAPIRef("webRequest.onBeforeRequest", "onBeforeRequest")}}
- {{WebExtAPIRef("webRequest.onBeforeSendHeaders", "onBeforeSendHeaders")}}
- {{WebExtAPIRef("webRequest.onAuthRequired", "onAuthRequired")}}
- 重定向请求: +
- 重定向请求:
-
- {{WebExtAPIRef("webRequest.onBeforeRequest", "onBeforeRequest")}}
- {{WebExtAPIRef("webRequest.onHeadersReceived", "onHeadersReceived")}}
- 修改请求头: +
- 修改请求头:
-
- {{WebExtAPIRef("webRequest.onBeforeSendHeaders", "onBeforeSendHeaders")}}
- 修改响应头: +
- 修改响应头:
-
- {{WebExtAPIRef("webRequest.onHeadersReceived", "onHeadersReceived")}}
- 加入认证功能: +
- 加入认证功能:
@@ -75,7 +75,7 @@
- {{WebExtAPIRef("webRequest.onAuthRequired", "onAuthRequired")}}
Modifying requests
为了完成这些操作,你需要在
-extraInfoSpec
参数中添加"blocking"的值到事件的addListener()
。这将使得监听器变成同步执行。在监听器中,你可以返回一个表明需要作修改的{{WebExtAPIRef("webRequest.BlockingResponse", "BlockingResponse")}}对象:比如说,你想要发送的修改后的请求头。从Firefox 52开始,监听器会返回一个
+resolve(BlockingResponse)
的Promise
,而不是直接返回一个BlockingResponse
。这使得监听器可以异步地处理请求。从 Firefox 52 开始,监听器会返回一个
resolve(BlockingResponse)
的Promise
,而不是直接返回一个BlockingResponse
。这使得监听器可以异步地处理请求。Types
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/webrequest/requestfilter/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/webrequest/requestfilter/index.html index 9802035b0961be..8a94398c7e15cb 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/webrequest/requestfilter/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/webrequest/requestfilter/index.html @@ -7,7 +7,7 @@ ---{{AddonSidebar()}}-webRequest事件参数
+webRequest 事件参数
Type
@@ -15,11 +15,11 @@Type
@@ -32,9 +32,9 @@
- -
urls
- 字符串数组类型,数组内的每个字符串为模式匹配格式。当请求地址符合给定模式时,事件监听器才会响应。需注意的是,仅支持http和HTTPS协议的参数地址,其他协议即使与该给定模式匹配也不会响应。
+- 字符串数组类型,数组内的每个字符串为模式匹配格式。当请求地址符合给定模式时,事件监听器才会响应。需注意的是,仅支持 http 和 HTTPS 协议的参数地址,其他协议即使与该给定模式匹配也不会响应。
- -
types
{{optional_inline}}- webRequest.ResourceType类型的数组,表示资源类型列表。例如:stylesheets、images、scripts。事件监听器仅响应出现在该指定列表的资源类型。
+- webRequest.ResourceType 类型的数组,表示资源类型列表。例如:stylesheets、images、scripts。事件监听器仅响应出现在该指定列表的资源类型。
- -
tabId
{{optional_inline}}- 数值类型,与{{WebExtAPIRef("tabs.Tab", "tab")}}关联,事件监听器仅响应指定了该tabId的请求。
+- 数值类型,与{{WebExtAPIRef("tabs.Tab", "tab")}}关联,事件监听器仅响应指定了该 tabId 的请求。
windowId
{{optional_inline}}- 数值类型,与{{WebExtAPIRef("windows.Window", "window")}}关联,事件监听器仅响应指定了该
windowId
的请求。Browser compatibility
告知信息 -该API基于Chromium的
+chrome.webRequest
API. 该文档来源于Chromium代码中的web_request.json
。该 API 基于 Chromium 的
-chrome.webRequest
API. 该文档来源于 Chromium 代码中的web_request.json
。Microsoft Edge兼容性数据由Microsoft Corporation提供,并包含在Creative Commons Attribution 3.0 United States License下。
+Microsoft Edge 兼容性数据由 Microsoft Corporation 提供,并包含在 Creative Commons Attribution 3.0 United States License 下。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/windows/create/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/windows/create/index.html index c8e5273b5a28b5..fbcffc68616acd 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/windows/create/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/windows/create/index.html @@ -5,16 +5,16 @@ ---{{AddonSidebar()}}-创建一个新的窗口.
+创建一个新的窗口。
-当你创建一个窗口时,你可以:
+当你创建一个窗口时,你可以:
-
- 加载一个或多个新的标签到该窗口中.
-- 将一个现有窗口的.标签移动到新的窗口中
+- 加载一个或多个新的标签到该窗口中。
+- 将一个现有窗口的。标签移动到新的窗口中
- 设置窗口的大小和位置
- 创建一个面板样式的窗口,它没有浏览器的默认样式(地址栏,工具栏等)
-- 设置窗口的多种属性, 像是获得焦点或是为隐私窗口.
+- 设置窗口的多种属性,像是获得焦点或是为隐私窗口。
这是一个异步的方法返回一个
@@ -34,32 +34,32 @@Promise
.参数
- -
url
{{optional_inline}}- +
. 一个URL或都URL数组要在该窗口中打开成标签页的. 完整的需要包括scheme (像.
字符串或字符串数组
http://www.google.com
, notwww.google.com
). 相对路径将相对于该拓展中的当前页. 默认为打开新标签页.. 一个 URL 或都 URL 数组要在该窗口中打开成标签页的。完整的需要包括 scheme (像。
字符串或字符串数组
http://www.google.com
, notwww.google.com
). 相对路径将相对于该拓展中的当前页。默认为打开新标签页。- -
tabId
{{optional_inline}}- +
integer
. 如果设置了该值,将该tab从一个现有的窗口中移到新窗口中.integer
. 如果设置了该值,将该 tab 从一个现有的窗口中移到新窗口中。- -
left
{{optional_inline}}- +
integer
. 窗口左边到屏幕左边缘的距离.如果没有设定,新窗口将按上一个焦点窗口定位水平位置. 对于panel样式窗口,该值不起作用.integer
. 窗口左边到屏幕左边缘的距离。如果没有设定,新窗口将按上一个焦点窗口定位水平位置。对于 panel 样式窗口,该值不起作用。- -
top
{{optional_inline}}- 窗口顶部到屏幕的顶部距离.如果没有设定,新窗口将按上一个焦点窗口定位垂直位置. 对于panel样式窗口,该值不起作用.
+- 窗口顶部到屏幕的顶部距离。如果没有设定,新窗口将按上一个焦点窗口定位垂直位置。对于 panel 样式窗口,该值不起作用。
- -
width
{{optional_inline}}- +
integer
. 新窗口的宽度, 包含框架. 未设定则使用默认宽度。.integer
. 新窗口的宽度,包含框架。未设定则使用默认宽度。.- -
height
{{optional_inline}}- +
integer
. 新窗口的高度, 包含框架. 未设定则使用默认高度。.integer
. 新窗口的高度,包含框架。未设定则使用默认高度。.- -
focused
{{optional_inline}}- +
boolean
.如果 为true
, 新窗口将获取焦点. 否则新窗口当在后台打开并且当前焦点窗口继续保持焦点.。.默认为trueboolean
.如果 为true
, 新窗口将获取焦点。否则新窗口当在后台打开并且当前焦点窗口继续保持焦点.。.默认为 true- -
incognito
{{optional_inline}}- +
boolean
. 是否打开为一个隐私窗口.如果设定为隐私窗口并且引入了tabId
, 则tabId对应的标签必须是一个隐私标签— 即不能把一个不是隐私标签的标签页移动到隐私窗口中。boolean
. 是否打开为一个隐私窗口。如果设定为隐私窗口并且引入了tabId
, 则 tabId 对应的标签必须是一个隐私标签— 即不能把一个不是隐私标签的标签页移动到隐私窗口中。- -
type
{{optional_inline}}- 一{{WebExtAPIRef('windows.CreateType')}} 值,表示创建窗口的类型.
+panel
或者popup
样式将打开一个没有默认浏览器样式的窗口 (地址栏,工具栏等)。- 一{{WebExtAPIRef('windows.CreateType')}} 值,表示创建窗口的类型。
panel
或者popup
样式将打开一个没有默认浏览器样式的窗口 (地址栏,工具栏等)。- -
state
{{optional_inline}}- 一个 {{WebExtAPIRef('windows.WindowState')}} 值, 窗口的祲状态。 最小化、最大化、全屏状态不能与
+left
,top
,width
, orheight
属性一起使用。- 一个 {{WebExtAPIRef('windows.WindowState')}} 值,窗口的祲状态。最小化、最大化、全屏状态不能与
left
,top
,width
, orheight
属性一起使用。返回值
-一个
+Promise
其中传入一个包含新窗口细节的 {{WebExtAPIRef('windows.Window')}} 对象。 这个{{WebExtAPIRef('windows.Window')}} 有自己的tabs属性集 ,而不像 {{WebExtAPIRef("windows.get()")}}返回的窗口对象和相似的API, 如果传递了populate项其仅仅包含tabs. 如果发生了错误 promise will be rejected with an error message.一个
Promise
其中传入一个包含新窗口细节的 {{WebExtAPIRef('windows.Window')}} 对象。这个{{WebExtAPIRef('windows.Window')}} 有自己的 tabs 属性集 ,而不像 {{WebExtAPIRef("windows.get()")}}返回的窗口对象和相似的 API, 如果传递了 populate 项其仅仅包含 tabs. 如果发生了错误 promise will be rejected with an error message.浏览器兼容性
@@ -85,7 +85,7 @@示例
creating.then(onCreated, onError); }); -当用户点击一个browser action打开一个窗口,并且将当前活跃的标签移动其中
+当用户点击一个 browser action 打开一个窗口,并且将当前活跃的标签移动其中
function onCreated(windowInfo) { console.log(`Created window: ${windowInfo.id}`); diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/windows/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/windows/index.html index b923176e302d90..a376fd364f91bf 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/windows/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/windows/index.html @@ -68,7 +68,7 @@浏览器兼容性
Chrome 的不兼容 部分列在 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities,为采用 WebExtChromeCompat 宏。
-如果您需要更新此内容,编辑 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities,然后按住Shift并刷新此页面以查看您的变更。
+如果您需要更新此内容,编辑 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities,然后按住 Shift 并刷新此页面以查看您的变更。
Edge 的不兼容
@@ -81,7 +81,7 @@Edge 的不兼容
此 API 基于 Chromium 的
-chrome.windows
API。此文档基于 Chromium 代码中的windows.json
。Microsoft Edge 兼容性数据由微软公司提供,并包含在创作共用 署名 3.0美国许可证下。
+Microsoft Edge 兼容性数据由微软公司提供,并包含在创作共用 署名 3.0 美国许可证下。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/windows/windowstate/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/windows/windowstate/index.html index 9ccacb44712722..395853acd14496 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/windows/windowstate/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/windows/windowstate/index.html @@ -9,7 +9,7 @@类型
-类型的值是字符串类型。 可能的值如下:
+类型的值是字符串类型。可能的值如下:
- @@ -27,9 +27,9 @@
"normal"
浏览器适配
致谢 -此API基于谷歌浏览器
+chrome.windows
API。此文档源于谷歌源码windows.json
.此 API 基于谷歌浏览器
-chrome.windows
API。此文档源于谷歌源码windows.json
.微软Edge浏览器兼容性数据由微软公司提供,并包含在美国Creative Commons Attribution 3.0许可证下。
+微软 Edge 浏览器兼容性数据由微软公司提供,并包含在美国 Creative Commons Attribution 3.0 许可证下。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/api/windows/windowtype/index.html b/files/zh-cn/mozilla/add-ons/webextensions/api/windows/windowtype/index.html index 6f9e5572b2fb77..d327a34c4023c9 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/api/windows/windowtype/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/api/windows/windowtype/index.html @@ -9,7 +9,7 @@Type
-类型的值是字符串类型。 可能的值如下:
+类型的值是字符串类型。可能的值如下:
- diff --git a/files/zh-cn/mozilla/add-ons/webextensions/build_a_cross_browser_extension/index.html b/files/zh-cn/mozilla/add-ons/webextensions/build_a_cross_browser_extension/index.html index 088cd4a9d3c7b4..9f5b9604971e48 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/build_a_cross_browser_extension/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/build_a_cross_browser_extension/index.html @@ -2,7 +2,7 @@ title: 构建一个跨浏览器的扩展程序 slug: Mozilla/Add-ons/WebExtensions/Build_a_cross_browser_extension tags: - - Web插件 + - Web 插件 - 扩展 - 指南 - 插件 @@ -11,7 +11,7 @@ ---
"normal"
{{AddonSidebar()}}
-浏览器扩展 API 的引入为浏览器扩展的开发创造了 “一次开发跨浏览器” 的前景。然而,在使用扩展 API 的浏览器中(主要是 Chrome、 Firefox、 Opera 和 Edge) ,API 的实现和覆盖范围都存在差异。除此之外,Safari 使用了它自己的 Safari 扩展脚本系统。
+浏览器扩展 API 的引入为浏览器扩展的开发创造了“一次开发跨浏览器”的前景。然而,在使用扩展 API 的浏览器中 (主要是 Chrome、Firefox、Opera 和 Edge) ,API 的实现和覆盖范围都存在差异。除此之外,Safari 使用了它自己的 Safari 扩展脚本系统。
最大化兼容浏览器扩展意味着至少在两个不同的浏览器上兼容同一个扩展。本文探讨了在创建跨浏览器扩展时所面临的六个主要挑战,并在每种情况下提出了如何应对这些挑战。
@@ -19,7 +19,7 @@跨平台扩展的开发障碍
-在开发跨平台扩展时,需要注意以下六个方面:
+在开发跨平台扩展时,需要注意以下六个方面:
- API 命名空间
@@ -32,7 +32,7 @@跨平台扩展的开发障碍
API 命名空间
-在四大主流浏览器中,有两个 API 命名空间正在使用:
+在四大主流浏览器中,有两个 API 命名空间正在使用:
- @@ -45,7 +45,7 @@
browser.*
是 Firefox 和 Edge 使用的扩展 API 的标准API 命名空间
API 异步事件处理
-在四个主要浏览器中,有两种方法可以处理异步事件:
+在四个主要浏览器中,有两种方法可以处理异步事件:
- promises 是 Firefox 使用的扩展 API 的标准
@@ -55,18 +55,18 @@API 异步事件处理
Firefox 还支持
chrome.*
命名空间中的 callbacks 风格的 API,这主要是为了便于从 Chrome 迁移。然而,应该首选使用 promises(以及browser.*
命名空间),它已被采纳为拟议标准的一部分。它极大地简化了异步事件处理,特别是在需要将事件链接在一起的情况下。-如果你对这两种方法之间的差异不熟悉,可以看一下 了解异步 JavaScript: Callbacks、 Promises 和 Async/Await 或者 MDN 的 Using promises 页面。
+如果你对这两种方法之间的差异不熟悉,可以看一下 了解异步 JavaScript: Callbacks、Promises 和 Async/Await 或者 MDN 的 Using promises 页面。
浏览器扩展 API 的垫片(Polyfill)
那么,当 Firefox 是唯一支持它的浏览器时,你如何轻松地使用 promises 呢?解决方案是使用 promises 为 Firefox 编程,并使用浏览器扩展 API 的垫片(Polyfill)!
-
- 这个 polyfill 解决了跨 Firefox、 Chrome 和 Opera 的 API 名称空间和异步事件处理。在撰写本报告时(2018年11月) ,Edge 的支持正在开发中。
+ 这个 polyfill 解决了跨 Firefox、Chrome 和 Opera 的 API 名称空间和异步事件处理。在撰写本报告时 (2018 年 11 月) ,Edge 的支持正在开发中。
要使用 polyfill,可以使用 npm 安装到开发环境中,或者直接从 GitHub Relase 页面下载。然后,引入
+browser-polyfill.js
到:然后,引入
browser-polyfill.js
到:
- @@ -96,7 +96,7 @@
manifest.json
,修改后使它可以用于 background 和 content 脚本浏览器扩展 API 的垫
API 函数覆盖率
-这四个主要浏览器提供的 API 函数的实现差异可分为三大类:
+这四个主要浏览器提供的 API 函数的实现差异可分为三大类:
-
- 缺乏对整个功能的支持。例如,在撰写本文时,Edge 没有提供对隐私功能的支持。
@@ -104,17 +104,17 @@API 函数覆盖率
- 专有功能,支持特定于浏览器的特性。例如,在撰写本文时,容器是一个特定于 firefox 的特性,由
contextualidentity
函数支持。你可以在 Mozilla Developer Network 浏览器对 JavaScript API 页面的支持上找到4个主要浏览器对扩展 API 的支持细节,以及 Firefox for Android 对扩展 API 的支持细节。浏览器兼容性信息也包含在每个函数及其方法、类型和事件的 Mozilla Developer Network JavaScript APIs 参考页面中。
+你可以在 Mozilla Developer Network 浏览器对 JavaScript API 页面的支持上找到 4 个主要浏览器对扩展 API 的支持细节,以及 Firefox for Android 对扩展 API 的支持细节。浏览器兼容性信息也包含在每个函数及其方法、类型和事件的 Mozilla Developer Network JavaScript APIs 参考页面中。
处理 API 差异
解决这些差异的一个简单方法是将扩展中使用的函数限制在没有 API 差异的函数范围内。在实践中,对于大多数扩展,这种方法可能限制性太强。
+ 相反,如果 API 之间存在差异,则应该提供替代实现或降级功能。(请记住:您可能还需要这样考虑同一浏览器的不同版本之间的 API 支持差异。)
- 相反,如果 API 之间存在差异,则应该提供替代实现或降级功能。(请记住: 您可能还需要这样考虑同一浏览器的不同版本之间的 API 支持差异。)使用运行时检查函数特性的可用性是实现备选或降级功能的推荐方法。执行运行时检查的好处是,如果函数是可用的,您不需要更新和重新分发扩展来使用它。
-下面的代码使您能够执行运行时检查:
+下面的代码使您能够执行运行时检查:
if (typeof <function> === "function") { // safe to use the function @@ -122,7 +122,7 @@处理 API 差异
Manifest 字段
-4个主要浏览器支持的
+manifest.json
文件字段的差异大致可分为三类:4 个主要浏览器支持的
manifest.json
文件字段的差异大致可分为三类:
- 扩展信息属性。例如,在撰写本文时,Firefox 和 Opera 包含和
@@ -139,7 +139,7 @@author
地位相等的developer
关键字,以获取扩展的开发者和作者的详细信息。扩展打包
通过浏览器扩展商店打包和分发扩展相对简单。
-
@@ -151,7 +151,7 @@- 火狐、 Chrome 和 Opera 都使用简单的 zip 格式打包,同时需要
+manifest.json
文件位于压缩包的根目录。- 火狐、Chrome 和 Opera 都使用简单的 zip 格式打包,同时需要
manifest.json
文件位于压缩包的根目录。- 但是,提交到 Microsoft 扩展商店需要对扩展文件进行额外打包。
扩展发布
因此,您需要为每个商店分别添加和更新扩展。在某些情况下,您可以使用脚本上传扩展。
-下表总结了每个商店的做法和特点:
+下表总结了每个商店的做法和特点:
@@ -167,7 +167,7 @@
-扩展发布
发布审核
- 开发者账号需要2FA验证
+开发者账号需要 2FA 验证
@@ -215,7 +215,7 @@ 扩展发布
否
- 人工审核,但不需要提供SLA
+人工审核,但不需要提供 SLA
否
@@ -232,7 +232,7 @@扩展发布
否
- 人工审核,需要72小时2
+人工审核,需要 72 小时2
是
@@ -257,7 +257,7 @@版本号指定
在不同的实现中共享资源
-即使你要支持的平台中包括 Safari,仍然可以在对于不同浏览器的实现中共享许多资源。其中包括:
+即使你要支持的平台中包括 Safari,仍然可以在对于不同浏览器的实现中共享许多资源。其中包括:
- Images
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/chrome_incompatibilities/index.html b/files/zh-cn/mozilla/add-ons/webextensions/chrome_incompatibilities/index.html index 8cc71470f95fbb..5b2f50dcff7db9 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/chrome_incompatibilities/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/chrome_incompatibilities/index.html @@ -7,9 +7,9 @@ ---{{AddonSidebar}}-使用WebExtension API构建的扩展旨在与Chrome和Opera扩展兼容:尽可能为这些浏览器编写的扩展应该在Firefox上运行,并且只需进行极少的更改。
+使用 WebExtension API 构建的扩展旨在与 Chrome 和 Opera 扩展兼容:尽可能为这些浏览器编写的扩展应该在 Firefox 上运行,并且只需进行极少的更改。
-但是,Firefox目前仅支持Chrome和Opera支持的有限功能和API。 我们正在努力增加更多的支持,但许多功能尚未得到支持,我们可能永远不会支持某些功能。
+但是,Firefox 目前仅支持 Chrome 和 Opera 支持的有限功能和 API。我们正在努力增加更多的支持,但许多功能尚未得到支持,我们可能永远不会支持某些功能。
JavaScript APIs
@@ -56,9 +56,9 @@回调与 chrome.* 命名空间
Firefox 支持
-chrome
和browser
命名空间为了帮助移植,Firefox 的 WebExtension 实现支持
+chrome
与回调和browser
与 promise。这意味着许多 Chrome 扩展无须修改就能在 Firefox 上运行。然而并不是 WebExtension 标准的一部分,也许不会被所有兼容 WebExtension的浏览器支持。为了帮助移植,Firefox 的 WebExtension 实现支持
-chrome
与回调和browser
与 promise。这意味着许多 Chrome 扩展无须修改就能在 Firefox 上运行。然而并不是 WebExtension 标准的一部分,也许不会被所有兼容 WebExtension 的浏览器支持。如果你在编写 WebExtension 时确实要用到
+browser
和 promise,我们也开发了polyfill 来保证扩展可以在 Chrome 里运行:https://github.com/mozilla/webextension-polyfill.如果你在编写 WebExtension 时确实要用到
browser
和 promise,我们也开发了 polyfill 来保证扩展可以在 Chrome 里运行:https://github.com/mozilla/webextension-polyfill.部分受支持的 API
@@ -96,7 +96,7 @@tabs<
webRequest
-
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/content_scripts/index.html b/files/zh-cn/mozilla/add-ons/webextensions/content_scripts/index.html index 781a589c76662f..f301351c798882 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/content_scripts/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/content_scripts/index.html @@ -7,41 +7,41 @@- 在Firefx中,只有原网址使用
+http:
或 https:
协议时所请求的重定向才有效。- 在 Firefx 中,只有原网址使用
http:
或 https:
协议时所请求的重定向才有效。- In Firefox, events are not fired for system requests (for example, extension upgrades or searchbar suggestions). From Firefox 57 onwards, Firefox makes an exception for extensions that need to intercept {{WebExtAPIRef("webRequest.onAuthRequired")}} for proxy authorization. See the documentation for {{WebExtAPIRef("webRequest.onAuthRequired")}}.
- In Firefox, if an extension wants to redirect a public (e.g. HTTPS) URL to an extension page, the extension's manifest.json file must contain a web_accessible_resources key that lists the URL for the extension page. Note that any website may then link or redirect to that url, and extensions should treat any input (POST data, for examples) as if it came from an untrusted source, just as a normal web page should.
Content script 是你扩展的一部分,运行于一个特定的网页环境(而并不是后台脚本,后台脚本是扩展的一部分,也不是该网页利用 {{HTMLElement("script")}} 加载的一个脚本,{{HTMLElement("script")}} 加载的脚本是网页的一部分)。
-后台脚本可以访问所有WebExtension JavaScript APIS,但是他们不能直接访问网页的内容,所以如果你需要Content Scripts来做到这点。
+后台脚本可以访问所有 WebExtension JavaScript APIS,但是他们不能直接访问网页的内容,所以如果你需要 Content Scripts 来做到这点。
-就像通常的网页加载的脚本一样,Content Scripts 可以使用standard DOM APIS 读取和修改页面内容。
+就像通常的网页加载的脚本一样,Content Scripts 可以使用 standard DOM APIS 读取和修改页面内容。
-Content Script 只能访问WebExtension APIS 的一个小的子集,但是它们可以使用通信系统与后台脚本进行通信,从而间接的访问WebExtension APIS。
+Content Script 只能访问 WebExtension APIS 的一个小的子集,但是它们可以使用通信系统与后台脚本进行通信,从而间接的访问 WebExtension APIS。
--注意content scripts 在addons.mozilla.org现在已被禁止,如果你在这个域名尝试插入一个Content script将会失败而这个页面会LOG一个CSP错误。
+注意 content scripts 在 addons.mozilla.org 现在已被禁止,如果你在这个域名尝试插入一个 Content script 将会失败而这个页面会 LOG 一个 CSP 错误。
加载Content scripts
+加载 Content scripts
-你可以通过两种方法之一在一个页面加载Content script:
+你可以通过两种方法之一在一个页面加载 Content script:
-
-- 声明式: 在你的manifest.json中使用content_scripts关键字,你可以要求浏览器每当加载一个与指定正则表达式匹配的网页时加载一个Content Script。
-- 程序式: 使用
+tabs.executeScript()
API, 你可以在任何你想要的时候加载一个Content script 到一个指定的标签:比如,作为用户点击事件的回应。- 声明式: 在你的 manifest.json 中使用 content_scripts 关键字,你可以要求浏览器每当加载一个与指定正则表达式匹配的网页时加载一个 Content Script。
+- 程序式: 使用
tabs.executeScript()
API, 你可以在任何你想要的时候加载一个 Content script 到一个指定的标签:比如,作为用户点击事件的回应。在每一个extension的每一个frame中,只有一个全局作用域。所以在一个content script中的变量可以被另外的content script访问到,而与content script如何被加载无关。
+在每一个 extension 的每一个 frame 中,只有一个全局作用域。所以在一个 content script 中的变量可以被另外的 content script 访问到,而与 content script 如何被加载无关。
Content script 环境
DOM 访问
-Content scripts 可以访问和修改页面的DOM,就像普通的页面脚本一样。他们也可以察觉页面脚本对页面做出的任何修改。
+Content scripts 可以访问和修改页面的 DOM,就像普通的页面脚本一样。他们也可以察觉页面脚本对页面做出的任何修改。
-不过,content scripts 得到的是一个“干净的DOM视图”,这意味着:
+不过,content scripts 得到的是一个“干净的 DOM 视图”,这意味着:
-
-- content scripts 不能看见页面脚本定义的javascript 变量。
-- 如果一个页面脚本重定义了一个DOM内置属性,content scripts将获取到这个属性的原始版本,而不是重定义版本。
+- content scripts 不能看见页面脚本定义的 javascript 变量。
+- 如果一个页面脚本重定义了一个 DOM 内置属性,content scripts 将获取到这个属性的原始版本,而不是重定义版本。
在 Gecko(译者注:Gecko是由 Mozilla 工程开发出的布局引擎的名字), 这种行为被称为射线视觉。
+在 Gecko(译者注:Gecko 是由 Mozilla 工程开发出的布局引擎的名字), 这种行为被称为射线视觉。
举个例子,考虑一个网页如下:
@@ -74,7 +74,7 @@DOM 访问
alert("The page script has also redefined 'confirm'"); } -现在一个扩展插入一个content script 如下:
+现在一个扩展插入一个 content script 如下:
// content-script.js @@ -88,13 +88,13 @@-DOM 访问
// sees the original form of redefined properties window.confirm("Are you sure?"); // calls the original window.confirm()相反的情况也是成立的:页面脚本不能察觉到通过content scripts 添加的JavaScript 属性。
+相反的情况也是成立的:页面脚本不能察觉到通过 content scripts 添加的 JavaScript 属性。
-这意味着content script 可以依靠DOM属性获取可预期的行为
+这意味着 content script 可以依靠 DOM 属性获取可预期的行为
-这种行为造成的一个结果是content script不能获取任何通过页面加载的Javascript 库。所以,如果这个页面包含JQuery,content script 将不会在意它。
+这种行为造成的一个结果是 content script 不能获取任何通过页面加载的 Javascript 库。所以,如果这个页面包含 JQuery,content script 将不会在意它。
-如果一个content script 想要使用Javascript库,这个库本身就必须像一个content script一样在这个content script旁被插入:
+如果一个 content script 想要使用 Javascript 库,这个库本身就必须像一个 content script 一样在这个 content script 旁被插入:
"content_scripts": [ { @@ -105,7 +105,7 @@DOM 访问
WebExtension APIs
-除了standard DOM APIS,content script还能使用以下WebExtension APIS:
+除了 standard DOM APIS,content script 还能使用以下 WebExtension APIS:
From
@@ -138,17 +138,17 @@extension
:WebExtension APIs
跨域名权限
-content scripts 拥有与扩展剩余部分一致的权限:所以如果这个扩展已在manifest.json文件中使用permission关键字请求跨域权限,其content script将能很好获取某些跨域权限。
+content scripts 拥有与扩展剩余部分一致的权限:所以如果这个扩展已在 manifest.json 文件中使用 permission 关键字请求跨域权限,其 content script 将能很好获取某些跨域权限。
后台脚本通信
-尽管content scripts 不能直接使用大部分WebExtension APIS,但他们可以通过使用messaging APIS 与扩展的后台脚本通信,然后便能够间接地调用所有的后台脚本能够调用的APIS。
+尽管 content scripts 不能直接使用大部分 WebExtension APIS,但他们可以通过使用 messaging APIS 与扩展的后台脚本通信,然后便能够间接地调用所有的后台脚本能够调用的 APIS。
-在background script和content script中有两种基本的通讯方式:你可以发送带有可选回复的一次性的消息,或者在两者之间建立一个长期活动的连接并用这个连接来进行信息交换。
+在 background script 和 content script 中有两种基本的通讯方式:你可以发送带有可选回复的一次性的消息,或者在两者之间建立一个长期活动的连接并用这个连接来进行信息交换。
一次性消息
-为了发送一个带有可选回复选项的一次性消息,你能使用以下APIS:
+为了发送一个带有可选回复选项的一次性消息,你能使用以下 APIS:
@@ -172,7 +172,7 @@
-一次性消息
举例,这里是一个监听点击事件的content script,如果点击发生在一个链接上,他将会将该链接的地址发送给后台脚本:
+举例,这里是一个监听点击事件的 content script,如果点击发生在一个链接上,他将会将该链接的地址发送给后台脚本:
// content-script.js @@ -185,7 +185,7 @@-一次性消息
browser.runtime.sendMessage({"url": e.target.href}); }后台脚本监听这个消息然后使用
+notifications
API 显示一个通知:后台脚本监听这个消息然后使用
notifications
API 显示一个通知:// background-script.js @@ -201,11 +201,11 @@-一次性消息
}这个示范代码从Github上的 notify-link-clicks-i18n 例子 修改而来.
+这个示范代码从 Github 上的 notify-link-clicks-i18n 例子 修改而来。
Connection-based messaging
-如果你将在一个content script 和 后台脚本间交换大量的消息,一次性消息会变得笨重而缓慢。所以一个更好的方案是在两个脚本间建立一个长久连接,然后使用该连接交换消息。
+如果你将在一个 content script 和 后台脚本间交换大量的消息,一次性消息会变得笨重而缓慢。所以一个更好的方案是在两个脚本间建立一个长久连接,然后使用该连接交换消息。
每个脚本都有一个
@@ -215,17 +215,17 @@runtime.Port
对象用以交换消息。Connection-based messaging
- -
在一个脚本中使用
runtime.onConnect
监听连接- 另一个脚本中调用
-tabs.connect()
(如果连接 content script) orruntime.connect()
(如果连接后台脚本). 这会返回一个runtime.Port
对象.- +
runtime.onConnect
传递它自己的runtime.Port
对象.- 另一个脚本中调用
+tabs.connect()
(如果连接 content script) orruntime.connect()
(如果连接后台脚本). 这会返回一个runtime.Port
对象。- -
runtime.onConnect
传递它自己的runtime.Port
对象。每个脚本都拥有一个port,两个脚本可以使用runtime.Port.postMessage()来发送消息,runtime.Port.onMessage 来接收消息
+每个脚本都拥有一个 port,两个脚本可以使用 runtime.Port.postMessage() 来发送消息,runtime.Port.onMessage 来接收消息
-比如,当加载该content script时:
+比如,当加载该 content script 时:
-
@@ -243,18 +243,18 @@- 连接到后台脚本,存取Port对象至
-myPort
- 监听myPort上的消息,并记录。
+- 连接到后台脚本,存取 Port 对象至
+myPort
- 监听 myPort 上的消息,并记录。
- 当用户点击网页是发送消息至后台脚本。
Connection-based messaging
myPort.postMessage({greeting: "they clicked the page!"}); }); -对应的后台脚本:
+对应的后台脚本:
-
- 监听content script 的所有连接企图。
-- 当收到连接请求后: +
- 监听 content script 的所有连接企图。
+- 当收到连接请求后:
--
- 存贮Port对象至
-portFromCS
- 使用portFromCS发送一个消息到content script
+- 存贮 Port 对象至
+portFromCS
- 使用 portFromCS 发送一个消息到 content script
- 开始监听消息并记录它们。
- 当用户点击浏览器的某些扩展按钮或动作后,发送一个消息到content script。
+- 当用户点击浏览器的某些扩展按钮或动作后,发送一个消息到 content script。
// background-script.js @@ -284,9 +284,9 @@Connection-based messaging
网页通信
-尽管content script 通常不能获取由网页脚本创建的对象,但他们可以通过
+window.postMessage
和window.addEventListener
APIs 与网页脚本进行通信.尽管 content script 通常不能获取由网页脚本创建的对象,但他们可以通过
-window.postMessage
和window.addEventListener
APIs 与网页脚本进行通信。比如:
+比如:
// page-script.js @@ -310,12 +310,12 @@-网页通信
} });完整的例子请访问该链接, visit the demo page on GitHub 并且观看以下介绍.
+完整的例子请访问该链接,visit the demo page on GitHub 并且观看以下介绍。
-需要注意的是当你用该方法与一些不被信任的网页进行交互式需要特别小心。WebExtensions拥有高等级权限,而一些恶意页面可以很轻松的获取这些权限。
+需要注意的是当你用该方法与一些不被信任的网页进行交互式需要特别小心。WebExtensions 拥有高等级权限,而一些恶意页面可以很轻松的获取这些权限。
-做一个微小的示范,假定有如下content script 代码:
+做一个微小的示范,假定有如下 content script 代码:
// content-script.js @@ -327,49 +327,49 @@-网页通信
} });现在网页脚本可以在content script 权限范围内运行任何代码。
+现在网页脚本可以在 content script 权限范围内运行任何代码。
与页面脚本共享对象
-这个部分的技术描述只适用于49版本后的Firefox
+这个部分的技术描述只适用于 49 版本后的 Firefox
-作为一个插件开发者你必须考虑脚本运行在任何伺机偷取用户个人隐私,破坏他们的电脑,或者使用其他方式攻击的网页上。
-隔离content script 和 页面脚本 便是为了使恶意网页的攻击变得更加困难。
+隔离 content script 和 页面脚本 便是为了使恶意网页的攻击变得更加困难。
这部分的技术打破了这个隔离,它们从根本上是危险的而应该被谨慎使用。
我们在 DOM access 中看到content scripts不会察觉到通过网页脚本修改的某些属性. 这意味着,如果一个网页加载了一个库比如JQuery,content script 将不会使用它,而不得不加载它自己的一个复制。相反的,网页加载的脚本也不能获知content script的修改。
+我们在 DOM access 中看到 content scripts 不会察觉到通过网页脚本修改的某些属性。这意味着,如果一个网页加载了一个库比如 JQuery,content script 将不会使用它,而不得不加载它自己的一个复制。相反的,网页加载的脚本也不能获知 content script 的修改。
-然而,Firefox提供了一些APIS 可以使得content script能够:
+然而,Firefox 提供了一些 APIS 可以使得 content script 能够:
-
- 访问页面脚本创建的Javascript 对象
-- 暴露他们自己的JavaScript对象给页面脚本.
+- 访问页面脚本创建的 Javascript 对象
+- 暴露他们自己的 JavaScript 对象给页面脚本。
Xray vision in Firefox
-在Firefox中,隔离content script 和页面脚本通过使用一种称为“Xray vision”的功能实现。 当一个处于更高权限的脚本访问一个被定义于一个更低权限版本的域中时,它将只能看见这个对象的原始版本。
+在 Firefox 中,隔离 content script 和页面脚本通过使用一种称为“Xray vision”的功能实现。当一个处于更高权限的脚本访问一个被定义于一个更低权限版本的域中时,它将只能看见这个对象的原始版本。
-任何 expando 属性都是不可见得, 而且如果对象的任何属性被重定义,他也只能能看见原始的实现而不是重定义的实现。
+任何 expando 属性都是不可见得,而且如果对象的任何属性被重定义,他也只能能看见原始的实现而不是重定义的实现。
这个功能的目的是为了让低权限的脚本不至于因为重定义原始对象属性而使高权限脚本行为异常。
-让我们来举个例子,当一个content script 访问一个页面的 window 类,他不会看见任何该页面脚本对这个window 添加的任何属性, 如果页面脚本重定义了任何已存在的属性,content script将只能看见该属性的原始版本。
+让我们来举个例子,当一个 content script 访问一个页面的 window 类,他不会看见任何该页面脚本对这个 window 添加的任何属性,如果页面脚本重定义了任何已存在的属性,content script 将只能看见该属性的原始版本。
更多信心请查看 Xray vision 和 Script security.
-从content script 中访问 页面脚本对象
+从 content script 中访问 页面脚本对象
-在Firefox中,content script中的DOM对象会获得一个额外的属性 wrappedJSObject。这是一个会包含任何由页面脚本所造成修改的”未包裹“对象。
+在 Firefox 中,content script 中的 DOM 对象会获得一个额外的属性 wrappedJSObject。这是一个会包含任何由页面脚本所造成修改的”未包裹“对象。
-让我们来看一个简单的例子,假定一个页面载入脚本如下:
+让我们来看一个简单的例子,假定一个页面载入脚本如下:
<!DOCTYPE html> <html> @@ -387,29 +387,29 @@-从content script 中访 var foo = "I'm defined in a page script!";
Xray vision 意味着 如果一个content script 尝试访问foo,它将是未定义的:
+Xray vision 意味着 如果一个 content script 尝试访问 foo,它将是未定义的:
// content-script.js console.log(window.foo); // undefined-在Firefox,content script 可以使用window.wrappedJSObject来看见全局属性:
+在 Firefox,content script 可以使用 window.wrappedJSObject 来看见全局属性:
// content-script.js console.log(window.wrappedJSObject.foo); // "I'm defined in a page script!"-注意因为这个原因,你最好不在依赖该对象的任何属性或方法 建立或执行某些操作,你所期望的,它们,甚至setter和getter 都可能被不被信任的代码重定义。
+注意因为这个原因,你最好不在依赖该对象的任何属性或方法 建立或执行某些操作,你所期望的,它们,甚至 setter 和 getter 都可能被不被信任的代码重定义。
-同时注意unwarapping是及物的:当你使用wrappedJSObject,该未包裹对象的任何属性都是未包裹的(同时都是不可靠的),所以 一个好的建议是只在你需要时获取这个对象,重新包裹他,你能这样做:
+同时注意 unwarapping 是及物的:当你使用 wrappedJSObject,该未包裹对象的任何属性都是未包裹的(同时都是不可靠的),所以 一个好的建议是只在你需要时获取这个对象,重新包裹他,你能这样做:
XPCNativeWrapper(window.wrappedJSObject.foo);-查看 Xray vision 文档获取更多.
+查看 Xray vision 文档获取更多。
-与页面脚本共享content script 对象
+与页面脚本共享 content script 对象
-Firefox 同样提供APIS允许content scripts 是对象对于页面脚本可用。这里是两个主要的APIS:
+Firefox 同样提供 APIS 允许 content scripts 是对象对于页面脚本可用。这里是两个主要的 APIS:
- @@ -418,9 +418,9 @@
exportFunction()
: 导出一个函数至页面脚本与页面脚本共享content
exportFunction
-给予一个定义于content script中的方法,exportFunction()导出他至页面脚本域,然后脚本可以调用它。
+给予一个定义于 content script 中的方法,exportFunction()导出他至页面脚本域,然后脚本可以调用它。
-比如,让我们考虑一个WebExtension有一个后台脚本如下:
+比如,让我们考虑一个 WebExtension 有一个后台脚本如下:
/* Execute content script in the active tab. @@ -449,14 +449,14 @@-exportFunction
}); });该脚本做了两件事:
+该脚本做了两件事:
-
-- 当用户点击浏览器按钮时,在当前标签执行一个content script 。
-- 监听从content script 传递的消息,并在消息到达时显示一个通知。
+- 当用户点击浏览器按钮时,在当前标签执行一个 content script。
+- 监听从 content script 传递的消息,并在消息到达时显示一个通知。
content script 如下:
+content script 如下:
/* Define a function in the content script's scope, then export it @@ -468,17 +468,17 @@-exportFunction
exportFunction(notify, window, {defineAs:'notify'});该脚本定义了一个函数notify()用以发送其参数到后台脚本,而后他导出了这个函数至页面脚本域。现在页面脚本可以调用该函数:
+该脚本定义了一个函数 notify()用以发送其参数到后台脚本,而后他导出了这个函数至页面脚本域。现在页面脚本可以调用该函数:
window.notify("Message from the page script!");-更详细的信息请看,
+Components.utils.exportFunction
.更详细的信息请看,
Components.utils.exportFunction
.cloneInto
-给予一个定义于content script的对象, 该技术可以创建该对象的一个复制到页面脚本域,从而使该复制可以被页面脚本访问.通常使用 structured clone algorithm 复制对象, 这意味着该对象中的方法不会被复制为了复制方法,需要传递cloneFunction选项.
+给予一个定义于 content script 的对象,该技术可以创建该对象的一个复制到页面脚本域,从而使该复制可以被页面脚本访问。通常使用 structured clone algorithm 复制对象,这意味着该对象中的方法不会被复制为了复制方法,需要传递 cloneFunction 选项。
-比如,这里有一个content script 定义了一个包含方法的对象,然后复制他们至页面脚本域:
+比如,这里有一个 content script 定义了一个包含方法的对象,然后复制他们至页面脚本域:
/* Create an object that contains functions in @@ -508,18 +508,18 @@cloneInto
详情请看
-Components.utils.cloneInto
.在content script中使用 eval()
+在 content script 中使用 eval()
-在 Chrome中,
+eval()
总是在content script的上下文环境中运行, 而不是在页面的上下文环境中运行.在 Chrome 中,
-eval()
总是在 content script 的上下文环境中运行,而不是在页面的上下文环境中运行。在Firefox中:
+在 Firefox 中:
-
-- 如果你调用
+eval()
,它在content script的上下文中运行- 如果你调用
eval()
,它在 content script 的上下文中运行- 如果你调用
window.eval()
,它在页面的上下文中运行比如,有一个content script如下:
+比如,有一个 content script 如下:
-// content-script.js @@ -533,9 +533,9 @@
在content script中使用 eval()
这段代码仅仅通过调用
+window.eval()
和eval()
创建了变量x和y。然后记录它们的值并通知页面更新.这段代码仅仅通过调用
-window.eval()
和eval()
创建了变量 x 和 y。然后记录它们的值并通知页面更新。接收到消息后页面的脚本记录下这些变量:
+接收到消息后页面的脚本记录下这些变量:
-window.addEventListener("message", function(event) { if (event.source === window && event.data && event.data.message === "check") { @@ -544,14 +544,14 @@
在content script中使用 eval()
在Chrome中,输出类似下面所示:
+在 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中,输出类似下面所示:
+在 Firefox 中,输出类似下面所示:
In content script, window.x: undefined In content script, window.y: 2 @@ -560,7 +560,7 @@
在content script中使用 eval()
上述内容同样适用于setTimeout()
,setInterval()
, andFunction()
. -当在页面的上下文中运行代码时, 适用于上面所提到的"Sharing content script objects with page scripts" 这一部分的警告: 页面的环境可能会被恶意的网页所控制,这可能会导致你所交互的对象会有意想不到的行为:
+当在页面的上下文中运行代码时,适用于上面所提到的"Sharing content script objects with page scripts" 这一部分的警告:页面的环境可能会被恶意的网页所控制,这可能会导致你所交互的对象会有意想不到的行为:
// page.js redefines console.log diff --git a/files/zh-cn/mozilla/add-ons/webextensions/content_security_policy/index.html b/files/zh-cn/mozilla/add-ons/webextensions/content_security_policy/index.html index d6139457400142..ac0d0842855152 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/content_security_policy/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/content_security_policy/index.html @@ -6,14 +6,14 @@
{{AddonSidebar}}--使用WebExtension API 开发的插件默认应用了内容安全策略(Content Security Policy, 缩写CSP)。这限制了可以加载的 <script> 和 <object> 的资源来源,并且禁止了潜在的不安全用法如
+eval()
.使用 WebExtension API 开发的插件默认应用了内容安全策略 (Content Security Policy, 缩写 CSP)。这限制了可以加载的 <script> 和 <object> 的资源来源,并且禁止了潜在的不安全用法如
-eval()
.这篇文章简单地解释了CSP是什么,默认的策略是什么,这对插件来说意味着什么,以及插件如何改变默认CSP。
+这篇文章简单地解释了 CSP 是什么,默认的策略是什么,这对插件来说意味着什么,以及插件如何改变默认 CSP。
Content Security Policy (CSP) 是一种避免网站意外执行包含有恶意的内容的机制。网站通过使用服务端发送的HTTP头指定CSP。CSP主要关注指定各种内容的合法来源,如脚本和嵌入式插件。例如,网站可以使用它来告诉浏览器应该只执行来自网站自身的JavaScript,而不腻执行其他来源的脚本。CSP还可以指导浏览器禁止潜在危险行为,如
+eval()
的使用。Content Security Policy (CSP) 是一种避免网站意外执行包含有恶意的内容的机制。网站通过使用服务端发送的 HTTP 头指定 CSP。CSP 主要关注指定各种内容的合法来源,如脚本和嵌入式插件。例如,网站可以使用它来告诉浏览器应该只执行来自网站自身的 JavaScript,而不腻执行其他来源的脚本。CSP 还可以指导浏览器禁止潜在危险行为,如
-eval()
的使用。和网页一样,插件可以加载其他来源的内容。例如浏览器的弹出窗口可以指定为一个HTML文档,它同样可以包含不同来源的JavaScript和CSS,就像一个普通的网页一样。
+和网页一样,插件可以加载其他来源的内容。例如浏览器的弹出窗口可以指定为一个 HTML 文档,它同样可以包含不同来源的 JavaScript 和 CSS,就像一个普通的网页一样。
<!DOCTYPE html> @@ -42,11 +42,11 @@ </html>-和网站相比,插件可以访问特权API,因此一旦它们被恶意代码破坏,风险就更大。因此:
+和网站相比,插件可以访问特权 API,因此一旦它们被恶意代码破坏,风险就更大。因此:
- 插件默认运行在一个相当严格的安全策略下。参考 default content security policy.
-- 插件的作者可以通过使用manifest.json中的
+content_security_policy
关键词改变这种默认策略,但是允许的策略仍然有一定的限制。参考content_security_policy
.- 插件的作者可以通过使用 manifest.json 中的
content_security_policy
关键词改变这种默认策略,但是允许的策略仍然有一定的限制。参考content_security_policy
.默认内容安全策略
@@ -55,23 +55,23 @@默认内容安全策略
"script-src 'self'; object-src 'self';"-这会被应用在任何没有明确在manifest.json中的
+content_security_policy
项设置自己的内容安全策略的插件中。它有以下几种效果:这会被应用在任何没有明确在 manifest.json 中的
content_security_policy
项设置自己的内容安全策略的插件中。它有以下几种效果:-
- - +
- - +
script 和 object资源的位置
+script 和 object 资源的位置
-在默认CSP下你只能加载相对插件来说本地的 <script> 和 <object> 资源。例如假设插件文档中存在这样一条语句:
+在默认 CSP 下你只能加载相对插件来说本地的 <script> 和 <object> 资源。例如假设插件文档中存在这样一条语句:
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>@@ -86,9 +86,9 @@script 和 object资源的位置
-eval() 和friends
+eval() 和 friends
-默认CSP下插件不被允许像JavaScript一样执行字符串。这意味着以下情况都被禁止:
+默认 CSP 下插件不被允许像 JavaScript 一样执行字符串。这意味着以下情况都被禁止:
eval("console.log('some output');");@@ -98,7 +98,7 @@eval() 和friends
内联 JavaScript
-默认CSP下内联JavaScript不被执行。这不仅不允许将JavaScript直接放在
+<script>
标签中间,也不允许内联事件句柄。即以下内容被禁止:默认 CSP 下内联 JavaScript 不被执行。这不仅不允许将 JavaScript 直接放在
<script>
标签中间,也不允许内联事件句柄。即以下内容被禁止:<script>console.log("foo");</script>diff --git a/files/zh-cn/mozilla/add-ons/webextensions/examples/index.html b/files/zh-cn/mozilla/add-ons/webextensions/examples/index.html index ce413198ea9eda..1b66e38c631126 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/examples/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/examples/index.html @@ -12,14 +12,14 @@为帮助了解如何开发扩展,我们维护了一个包含简单扩展示例的代码仓库在https://github.com/mdn/webextensions-examples. 本文描述了仓库代码中所使用的 WebExtension APIs。
-这些示例工作在 Firefox Nightly 下: 大部分示例在 Firefox 的早期版本中也能够运行, 请检查扩展 manifest.json 文件中的 strict_min_version 键。
+这些示例工作在 Firefox Nightly 下:大部分示例在 Firefox 的早期版本中也能够运行,请检查扩展 manifest.json 文件中的 strict_min_version 键。
如果你想尝试这些示例,有下面三个选择:
- 克隆代码库,通过 "临时载入附加组件" 功能直接从源文件夹中载入扩展组件。再重启浏览器前该扩展将一直存在。
- 克隆代码库,使用 web-ext 命令行工具运行安装了扩展的 Firefox。
-- 克隆代码库,进入 build 文件夹。该文件夹包含所有示例的已构建、带签名版本。你可以在Firefox中打开(菜单栏->文件->打开文件)并且永久安装这些扩展。这些扩展和直接从 addons.mozilla.org 安装的扩展别无二致。
+- 克隆代码库,进入 build 文件夹。该文件夹包含所有示例的已构建、带签名版本。你可以在 Firefox 中打开(菜单栏->文件->打开文件)并且永久安装这些扩展。这些扩展和直接从 addons.mozilla.org 安装的扩展别无二致。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/extending_the_developer_tools/index.html b/files/zh-cn/mozilla/add-ons/webextensions/extending_the_developer_tools/index.html index cf44f0de277b5e..82a0504970443a 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/extending_the_developer_tools/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/extending_the_developer_tools/index.html @@ -11,26 +11,26 @@{{AddonSidebar}}--本页介绍了火狐 Firefox 55中存在的开发工具接口(dectools APIs)。 虽然该接口Api基于 Chrome 开发工具Api,仍有许多功能尚未实现在火狐中实现,因此未记录在本页内容中。产看当前缺失的功能,请参阅链接开发工具Api的限制.
+本页介绍了火狐 Firefox 55 中存在的开发工具接口(dectools APIs)。虽然该接口 Api 基于 Chrome 开发工具 Api,仍有许多功能尚未实现在火狐中实现,因此未记录在本页内容中。产看当前缺失的功能,请参阅链接开发工具 Api 的限制。
您可以使用WebExtensions API扩展浏览器的内置开发人员工具。要创建devtools扩展,请在manifest.json中包含“ devtools_page”键:
+您可以使用 WebExtensions API 扩展浏览器的内置开发人员工具。要创建 devtools 扩展,请在 manifest.json 中包含“devtools_page”键:
"devtools_page": "devtools/devtools-page.html"-此项的值是指向与您的扩展程序捆绑在一起的HTML文件的URL。该URL应相对于manifest.json文件本身。
+此项的值是指向与您的扩展程序捆绑在一起的 HTML 文件的 URL。该 URL 应相对于 manifest.json 文件本身。
-HTML文件在扩展中定义了一个特殊页面,称为devtools页面。
+HTML 文件在扩展中定义了一个特殊页面,称为 devtools 页面。
-devtools页面
+devtools 页面
-当打开浏览器devtools时,将加载devtools页面,并在关闭浏览器时将其卸载。请注意,由于devtools窗口与单个选项卡相关联,因此很可能同时存在多个devtools窗口-因此有多个devtools页面。
+当打开浏览器 devtools 时,将加载 devtools 页面,并在关闭浏览器时将其卸载。请注意,由于 devtools 窗口与单个选项卡相关联,因此很可能同时存在多个 devtools 窗口 - 因此有多个 devtools 页面。
-devtools页面没有任何可见的DOM,但可以包含使用<script>标记的JavaScript源。源必须与扩展本身捆绑在一起。来源可以访问::
+devtools 页面没有任何可见的 DOM,但可以包含使用<script>标记的 JavaScript 源。源必须与扩展本身捆绑在一起。来源可以访问::
-
-- 可通过全局窗口对象访问的普通DOM API
-- 与内容脚本中相同的WebExtension API
+- 可通过全局窗口对象访问的普通 DOM API
+- 与内容脚本中相同的 WebExtension API
- The devtools APIs:
- @@ -40,7 +40,7 @@
devtools.inspectedWindow
devtools页面
请注意,devtools页面无法访问任何其他WebExtension API,并且后台页面无法访问devtools API。相反,devtools页面和后台页面必须使用运行时消息传递API进行通信。这是一个例子:
+请注意,devtools 页面无法访问任何其他 WebExtension API,并且后台页面无法访问 devtools API。相反,devtools 页面和后台页面必须使用运行时消息传递 API 进行通信。这是一个例子:
<!DOCTYPE html> <html> @@ -52,13 +52,13 @@-devtools页面
</body> </html>devtools.js文件将保存创建您的dev工具扩展的实际代码。
+devtools.js 文件将保存创建您的 dev 工具扩展的实际代码。
创建面板
-devtools窗口中包含许多单独的工具-JavaScript调试器,网络监视器等。顶部的一排标签可让用户在不同的工具之间切换。承载每个工具的用户界面的窗口称为“面板”
+devtools 窗口中包含许多单独的工具-JavaScript 调试器,网络监视器等。顶部的一排标签可让用户在不同的工具之间切换。承载每个工具的用户界面的窗口称为“面板”
-使用devtools.panels.create()API,可以在devtools窗口中创建自己的面板:
+使用 devtools.panels.create()API,可以在 devtools 窗口中创建自己的面板:
browser.devtools.panels.create( "My Panel", // title @@ -69,11 +69,11 @@-创建面板
newPanel.onHidden.addListener(unInitialisePanel); });这需要三个必选参数:面板的标题,图标和内容。它返回一个Promise,该Promise解析为代表新面板的devtools.panels.ExtensionPanel对象。
+这需要三个必选参数:面板的标题,图标和内容。它返回一个 Promise,该 Promise 解析为代表新面板的 devtools.panels.ExtensionPanel 对象。
与目标窗口互动
-开发人员工具始终附加到特定的浏览器选项卡。这称为开发人员工具的“目标”或“检查的窗口”。您可以使用devtools.inspectedWindow API与检查的窗口进行交互。
+开发人员工具始终附加到特定的浏览器选项卡。这称为开发人员工具的“目标”或“检查的窗口”。您可以使用 devtools.inspectedWindow API 与检查的窗口进行交互。
Running code in the target window
@@ -82,18 +82,18 @@Running code in the target window
这有点像使用{{WebExtAPIRef("tabs.executeScript()")}}注入内容脚本,但有一个重要区别:-
- 与内容脚本不同,使用devtools.inspectedWindow.eval()加载的脚本不会获得“ DOM的清晰视图”:也就是说,它们可以看到页面脚本对页面所做的更改。
+- 与内容脚本不同,使用 devtools.inspectedWindow.eval()加载的脚本不会获得“DOM 的清晰视图”:也就是说,它们可以看到页面脚本对页面所做的更改。
--请注意,DOM的清晰视图是一项安全功能,旨在通过重新定义本机DOM功能的行为来帮助防止恶意页面欺骗扩展。这意味着您需要非常小心地使用eval(),并应尽可能使用普通的内容脚本。
+请注意,DOM 的清晰视图是一项安全功能,旨在通过重新定义本机 DOM 功能的行为来帮助防止恶意页面欺骗扩展。这意味着您需要非常小心地使用 eval(),并应尽可能使用普通的内容脚本。
devtools.inspectedWindow.eval()加载的脚本也看不到内容脚本定义的任何JavaScript变量。
+devtools.inspectedWindow.eval()加载的脚本也看不到内容脚本定义的任何 JavaScript 变量。
Working with content scripts
-devtools文档无法直接访问{{WebExtAPIRef("tabs.executeScript()")}},因此,如果需要注入内容脚本,devtools文档必须向后台脚本发送一条消息,要求其注入剧本。 devtools.inspectedWindow.tabId提供目标选项卡的ID:devtools文档可以将其传递给后台脚本,而后台脚本又可以将其传递给{{WebExtAPIRef("tabs.executeScript()")}}:
+devtools 文档无法直接访问{{WebExtAPIRef("tabs.executeScript()")}},因此,如果需要注入内容脚本,devtools 文档必须向后台脚本发送一条消息,要求其注入剧本。devtools.inspectedWindow.tabId 提供目标选项卡的 ID:devtools 文档可以将其传递给后台脚本,而后台脚本又可以将其传递给{{WebExtAPIRef("tabs.executeScript()")}}:
// devtools-panel.js @@ -116,13 +116,13 @@-Working with content scripts
browser.runtime.onMessage.addListener(handleMessage);如果您需要在目标窗口中运行的内容脚本和devtools文档之间交换消息,则最好使用{{WebExtAPIRef("runtime.connect()")}}和{{WebExtAPIRef("runtime.onConnect()")}},以在后台页面和devtools文档之间建立连接。然后,后台页面可以维护选项卡ID和{{WebExtAPIRef("runtime.Port")}}对象之间的映射,并使用此映射在两个作用域之间路由消息。
+如果您需要在目标窗口中运行的内容脚本和 devtools 文档之间交换消息,则最好使用{{WebExtAPIRef("runtime.connect()")}}和{{WebExtAPIRef("runtime.onConnect()")}},以在后台页面和 devtools 文档之间建立连接。然后,后台页面可以维护选项卡 ID 和{{WebExtAPIRef("runtime.Port")}}对象之间的映射,并使用此映射在两个作用域之间路由消息。
-devtools API的局限性
+devtools API 的局限性
-这些API基于Chrome devtools API,但与Chrome相比,许多功能仍缺失。本节列出了从Firefox 54开始尚未实现的功能。请注意,devtools API正在积极开发中,我们希望在将来的版本中增加对其中大多数功能的支持。
+这些 API 基于 Chrome devtools API,但与 Chrome 相比,许多功能仍缺失。本节列出了从 Firefox 54 开始尚未实现的功能。请注意,devtools API 正在积极开发中,我们希望在将来的版本中增加对其中大多数功能的支持。
devtools.inspectedWindow
@@ -136,7 +136,7 @@devtools.inspectedWindow
None of the options to
-inspectedWindow.eval()
are supported.使用inspectedWindow.eval()注入的脚本不能使用控制台的所有命令行帮助器功能,但是都支持$ 0和inspect(...)(从Firefox 55开始)。
+使用 inspectedWindow.eval()注入的脚本不能使用控制台的所有命令行帮助器功能,但是都支持$ 0 和 inspect(...)(从 Firefox 55 开始)。
devtools.panels
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/implement_a_settings_page/index.html b/files/zh-cn/mozilla/add-ons/webextensions/implement_a_settings_page/index.html index 8453fa87ee88a7..d92018f023792d 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/implement_a_settings_page/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/implement_a_settings_page/index.html @@ -8,12 +8,12 @@设置页面可以让用户查看,修改扩展的一些设置。
-对于WebExtensions,设置通常使用
+storage
API 保存. 实现一个设置页面通常包含以下三步:对于 WebExtensions,设置通常使用
storage
API 保存。实现一个设置页面通常包含以下三步:-
- 制作一个HTML 文件用以显示并修改设置
-- 写一个包含于该HTML文件的脚本,其可以使设置页面存储与存储设备中并在用户修改后更新他。
-- 在manifest.json文件
+options_ui
关键字中 设置HTML文件的路径。通过这种方式,该HTML将会被显示浏览器管理器里该插件名字和描述的旁边。- 制作一个 HTML 文件用以显示并修改设置
+- 写一个包含于该 HTML 文件的脚本,其可以使设置页面存储与存储设备中并在用户修改后更新他。
+- 在 manifest.json 文件
options_ui
关键字中 设置 HTML 文件的路径。通过这种方式,该 HTML 将会被显示浏览器管理器里该插件名字和描述的旁边。@@ -24,7 +24,7 @@-简单的 WebExtension
首先,我们写一个向用户访问的所有页面添加一个蓝色边框的扩展。
-创建一个新的文件夹命名为“setting”,然后创建文件“manifest.json”它包含以下内容:
+创建一个新的文件夹命名为“setting”,然后创建文件“manifest.json”它包含以下内容:
{ @@ -41,15 +41,15 @@-简单的 WebExtension
}该扩展指示浏览器在用户访问的网站上加载一个名为"borderify.js“的Content Script。
+该扩展指示浏览器在用户访问的网站上加载一个名为"borderify.js“的 Content Script。
-接下来,在"setting"目录下创建"borderify.js",然后给予他以下内容:
+接下来,在"setting"目录下创建"borderify.js",然后给予他以下内容:
document.body.style.border = "10px solid blue";这只是向网页加入了一一个蓝色边框
-现在 安装该扩展 并测试它——打开任意一个网页:
+现在 安装该扩展 并测试它——打开任意一个网页:
{{EmbedYouTube("E-WUhihF8fw")}}
@@ -57,7 +57,7 @@添加设置页面
现在让我们创建一个设置页面来允许用户设置边框的颜色。
-首先更新 "manifest.json" 使他拥有如下内容:
+首先更新 "manifest.json" 使他拥有如下内容:
{ @@ -81,14 +81,14 @@-添加设置页面
}我们加入了两个manifest 关键字:
+我们加入了两个 manifest 关键字:
-
-- -
options_ui
: 设置了一个HTML来作为设置页面。- +
permissions
: 我们使用storage
API 来保存设置, 所以我们需要请求权限来使用该API。- +
options_ui
: 设置了一个 HTML 来作为设置页面。permissions
: 我们使用storage
API 来保存设置,所以我们需要请求权限来使用该 API。接下来,因为我们承诺提供"options.html",让我们来创建他,在"setting"目录创建一个该文件并具有以下内容:
+接下来,因为我们承诺提供"options.html",让我们来创建他,在"setting"目录创建一个该文件并具有以下内容:
<!DOCTYPE html> @@ -113,7 +113,7 @@添加设置页面
这里定义了一个带有标记文字{{htmlelement("input")}}的 {{htmlelement("form")}} 和一个 提交 {{htmlelement("button")}}. 也包含了一个名为"options.js"的脚本。
-仍然在"settting"目录下创建 "options.js",并给予他以下内容:
+仍然在"settting"目录下创建 "options.js",并给予他以下内容:
function saveOptions(e) { e.preventDefault(); @@ -140,17 +140,17 @@-添加设置页面
document.querySelector("form").addEventListener("submit", saveOptions);它做了两件事:
+它做了两件事:
-
-- 当网页被加载它使用
+storage.local.get()
从存贮设备中获取了名为"color”的值.如果该值未被设置其为默认值blue。- 当网页被加载它使用
storage.local.get()
从存贮设备中获取了名为"color”的值。如果该值未被设置其为默认值 blue。- 当用户点击提交按钮,使用
storage.local.set()
存贮颜色值。最后,更新"borderify.js" 来读取边框颜色:
+最后,更新"borderify.js" 来读取边框颜色:
-因为 browser.storage.local.get() 在火狐52版本之前的一个漏洞 ,以下代码没法起作用。为了使它生效,
+onGot()中的 item.color 必须改为 item[0].color。
因为 browser.storage.local.get() 在火狐 52 版本之前的一个漏洞 ,以下代码没法起作用。为了使它生效,
onGot()中的 item.color 必须改为 item[0].color。
function onError(error) { @@ -169,7 +169,7 @@-添加设置页面
getting.then(onGot, onError);最后,完整的扩展看起来是这样:
+最后,完整的扩展看起来是这样:
settings/ borderify.js @@ -177,7 +177,7 @@-添加设置页面
options.html options.js现在:
+现在:
- 重新载入扩展
@@ -196,7 +196,7 @@进一步了解
options_ui
关键字文档storage
API 文档- 使用
-runtime.openOptionsPage()
直接打开你的设置页面- 另一个设置页面例子: +
- 另一个设置页面例子: diff --git a/files/zh-cn/mozilla/add-ons/webextensions/index.md b/files/zh-cn/mozilla/add-ons/webextensions/index.md index 6a4ab930a02eeb..8998257ffed294 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/index.md +++ b/files/zh-cn/mozilla/add-ons/webextensions/index.md @@ -18,9 +18,9 @@ translation_of: Mozilla/Add-ons/WebExtensions - 指南 - : 无论你是刚开始学习还是在寻找更加高级的建议,你可以从我们大量的[教程和指南中](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/What_are_WebExtensions)学习扩展是如何工作的以及如何使用 WebExtensions API。 - 参考资料 - - : 获取全面的关于方法,属性,类型,事件等 [WebExtensions APIs](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs)的细节部分以及关于 [manifest 键列表](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json)的全部细节。 + - : 获取全面的关于方法,属性,类型,事件等 [WebExtensions APIs](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs) 的细节部分以及关于 [manifest 键列表](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json)的全部细节。 - Firefox 工作流 - - : 了解如何为Firefox构建、发布扩展: 在[扩展工作坊](https://extensionworkshop.com/)了解开发者工具,发布和移植的基本原理。 + - : 了解如何为 Firefox 构建、发布扩展:在[扩展工作坊](https://extensionworkshop.com/)了解开发者工具,发布和移植的基本原理。 > **备注:** 如果你有任何的想法、问题或者是需要帮助,可以在[社区论坛](https://discourse.mozilla.org/c/add-ons)和在 [Matrix](https://wiki.mozilla.org/Matrix) 上的[附加组件](https://matrix.to/#/!CuzZVoCbeoDHsxMCVJ:mozilla.org?via=mozilla.org&via=matrix.org&via=humanoids.be)房间联系到我们。 @@ -43,9 +43,9 @@ translation_of: Mozilla/Add-ons/WebExtensions ## Firefox 工作流 -当你已经准备好创建你的 Firefox 扩展或者是移植你的Chrome扩展时,前往[扩展工作坊](https://extensionworkshop.com/)。它包含了以下细节: +当你已经准备好创建你的 Firefox 扩展或者是移植你的 Chrome 扩展时,前往[扩展工作坊](https://extensionworkshop.com/)。它包含了以下细节: -- Firefox 工作流, 例如[在开发时临时安装扩展](https://extensionworkshop.com/documentation/develop/temporary-installation-in-firefox/),[调试](https://extensionworkshop.com/documentation/develop/debugging/),[获取对的权限](https://extensionworkshop.com/documentation/develop/request-the-right-permissions/)等等。 +- Firefox 工作流,例如[在开发时临时安装扩展](https://extensionworkshop.com/documentation/develop/temporary-installation-in-firefox/)、[调试](https://extensionworkshop.com/documentation/develop/debugging/)、[获取对的权限](https://extensionworkshop.com/documentation/develop/request-the-right-permissions/),等等。 - [web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/) 开发者工具。 - [移植谷歌 Chrome 浏览器扩展](https://extensionworkshop.com/documentation/develop/porting-a-google-chrome-extension/),[桌面程序与安卓的差异](https://extensionworkshop.com/documentation/develop/differences-between-desktop-and-android-extensions/),等等。 - [预览发布](https://extensionworkshop.com/documentation/publish/),[推广你的扩展](https://extensionworkshop.com/documentation/publish/promoting-your-extension/),[扩展生命周期的最佳实践](https://extensionworkshop.com/documentation/manage/)。 @@ -54,7 +54,7 @@ translation_of: Mozilla/Add-ons/WebExtensions ### JavaScript APIs -获取全面的关于方法,属性,类型,事件等 [JavaScript APIs](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API) 的细节部分。在那儿你也可以获取到每个API与主流浏览器的兼容性的详尽细节。大多数的参考资料页面都包含使用这些 API 的代码示例和扩展示例的链接。 +获取全面的关于方法,属性,类型,事件等 [JavaScript APIs](/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API) 的细节部分。在那儿你也可以获取到每个 API 与主流浏览器的兼容性的详尽细节。大多数的参考资料页面都包含使用这些 API 的代码示例和扩展示例的链接。 ### Manifest 键列表 diff --git a/files/zh-cn/mozilla/add-ons/webextensions/interact_with_the_clipboard/index.html b/files/zh-cn/mozilla/add-ons/webextensions/interact_with_the_clipboard/index.html index 5365209bc90cdd..ba566591866e70 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/interact_with_the_clipboard/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/interact_with_the_clipboard/index.html @@ -5,9 +5,9 @@ ---
{{AddonSidebar}}-有两种方式可以让浏览器扩展与系统剪贴板交互: {{domxref("Document.execCommand()")}} 方法以及现代的异步的 Clipboard API.
+有两种方式可以让浏览器扩展与系统剪贴板交互:{{domxref("Document.execCommand()")}} 方法以及现代的异步的 Clipboard API.
-{{domxref("Document.execCommand()")}} 方法常通过以下指令使用:
+{{domxref("Document.execCommand()")}} 方法常通过以下指令使用:
-
- @@ -15,23 +15,23 @@
document.execCommand("copy")
document.execCommand("paste")
Clipboard API 提供了异步的连接来直接读写剪贴板内容. 例, 如此从剪贴板读取文本:
+Clipboard API 提供了异步的连接来直接读写剪贴板内容。例,如此从剪贴板读取文本:
navigator.clipboard.readText().then(text => outputElem.innerText = text);-这将请求剪贴板内容, 并且当接收到响应时存储剪贴板文本到一个元素的 {{domxref("Node.innerText", "innerText")}}.
+这将请求剪贴板内容,并且当接收到响应时存储剪贴板文本到一个元素的 {{domxref("Node.innerText", "innerText")}}.
-注意: 异步的 Clipboard API 方法是一个近期新增的规范, 并且这个规范可能不适用于所有浏览器. 请在使用前测试了每一种方法的兼容性, 以确保支持满足您的需求.
+注意:异步的 Clipboard API 方法是一个近期新增的规范,并且这个规范可能不适用于所有浏览器。请在使用前测试了每一种方法的兼容性,以确保支持满足您的需求。
写入系统粘贴板
-有两种向剪贴板写入数据的方法. 你可以使用 {{domxref("Document.execCommand", "document.execCommand()")}} 来触发 "剪切" 和 "复制" 行为, 这将用选择的数据覆盖剪贴板的当前内容. 另一个选项是使用 Clipboard API 的 {{domxref("Clipboard.writeText()")}} 或 {{domxref("Clipboard.write()")}} 方法来用指定数据覆盖剪贴板内容.
+有两种向剪贴板写入数据的方法。你可以使用 {{domxref("Document.execCommand", "document.execCommand()")}} 来触发 "剪切" 和 "复制" 行为,这将用选择的数据覆盖剪贴板的当前内容。另一个选项是使用 Clipboard API 的 {{domxref("Clipboard.writeText()")}} 或 {{domxref("Clipboard.write()")}} 方法来用指定数据覆盖剪贴板内容。
使用 execCommand()
-{{domxref("Document.execCommand", "document.execCommand()")}} 方法的
+"cut"
与"copy"
命令可以被用于以选中素材代替剪贴板的当前内容. 这些命令无需任何特别的权限就可以使用, 如果你在一个用于用户操作的短生存期的事件处理程序中使用他们(例如, 一次点击事件).{{domxref("Document.execCommand", "document.execCommand()")}} 方法的
"cut"
与"copy"
命令可以被用于以选中素材代替剪贴板的当前内容。这些命令无需任何特别的权限就可以使用,如果你在一个用于用户操作的短生存期的事件处理程序中使用他们 (例如,一次点击事件).例如,假设你有一个下面的弹出菜单页面:
@@ -65,19 +65,19 @@使用 execCommand()
browser.alarms.onAlarm.addListener(copy); -这种触发不一定成功,它取决于浏览器是否支持。Firefox浏览器就不支持该功能,你会在浏览器控制台中看到以下信息:
+这种触发不一定成功,它取决于浏览器是否支持。Firefox 浏览器就不支持该功能,你会在浏览器控制台中看到以下信息:
"document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler."-为了能够在这种情形下使用,你需要拥有"clipboardWrite"的权限( permission)。 因此,"clipboardWrite"权限能使你不通过临时事件处理程序就可以写入系统粘贴板中。
+为了能够在这种情形下使用,你需要拥有"clipboardWrite"的权限( permission)。因此,"clipboardWrite"权限能使你不通过临时事件处理程序就可以写入系统粘贴板中。
使用 Clipboard API
-Clipboard API 更加灵活, 因为你不仅可以将当前选择复制到剪贴板中, 还可以直接指定要放入剪贴板的信息.
+Clipboard API 更加灵活,因为你不仅可以将当前选择复制到剪贴板中,还可以直接指定要放入剪贴板的信息。
-要使用 Clipboard API 需要在你的
+manifest.json
文件中申请clipboardRead
与clipboardWrite
权限.要使用 Clipboard API 需要在你的
-manifest.json
文件中申请clipboardRead
与clipboardWrite
权限。对于页面脚本, 需要权限 API 的
+clipboard-write
权限. 你可通过 {{domxref("Permissions.query", "navigator.permissions.query()")}} 来检查这个权限:对于页面脚本,需要权限 API 的
clipboard-write
权限。你可通过 {{domxref("Permissions.query", "navigator.permissions.query()")}} 来检查这个权限:-navigator.permissions.query({name: "clipboard-write"}).then(result => { if (result.state == "granted" || result.state == "prompt") { @@ -85,7 +85,7 @@
使用 Clipboard API
} });这个函数使用一个字符串作为输入并且用它更新剪贴板:
+这个函数使用一个字符串作为输入并且用它更新剪贴板:
function updateClipboard(newClip) { navigator.clipboard.writeText(newClip).then(function() { @@ -97,20 +97,20 @@
使用 Clipboard API
特定浏览器注意事项
-这里涉及的剪贴板和其他API正在快速发展, 因此浏览器在工作方式上存在差异.
+这里涉及的剪贴板和其他 API 正在快速发展,因此浏览器在工作方式上存在差异。
-在Chrome中:
+在 Chrome 中:
-
- 你可以在所有执行上下文中写入系统粘贴板,像背景网页、内容脚本、标签页和弹出菜单。
- 你不需要
"clipboardWrite"
权限,甚至不需要在用户生成的事件处理程序中写入粘贴板在Firefox中:
+在 Firefox 中:
-
- 除了背景网页外,你可以在所有执行上下文中使用 execCommand 写入粘贴板。在Firefox中,你无法选择文本或将输入字段聚焦在后台页面中,因此无法使用 execCommand 从后台页面写入剪贴板。
-- 只有version 51以上才支持"clipboardWrite" 权限。
+- 除了背景网页外,你可以在所有执行上下文中使用 execCommand 写入粘贴板。在 Firefox 中,你无法选择文本或将输入字段聚焦在后台页面中,因此无法使用 execCommand 从后台页面写入剪贴板。
+- 只有 version 51 以上才支持"clipboardWrite" 权限。
- 从 version 57 开始,可以使用
clipboard.setImageData()
API 将图像复制到剪贴板。- 在 Firefox 633 中添加了对 Clipboard API {{domxref("Clipboard.writeText", "navigator.clipboard.writeText()")}} 方法的支持。
- 当使用一个内容脚本,Clipboard API 只可用于 HTTPS 页。解决方法是,在内容脚本和后台脚本之间使用消息传递。
@@ -124,13 +124,13 @@使用 execCommand()
首先,你需要为扩展申请
-"clipboardRead"
permission 。即便你在用户生成的事件处理程序 ( 例如 {{event("click")}} 或 {{event("keypress")}} ) 中使用 "paste" 指令也是如此。假设你的HTML页面内容如下:
+假设你的 HTML 页面内容如下:
<input id="output" type="text"/> <button id="paste">粘贴</button>-要在用户单机 id 为
+"paste"
的 {{HTMLElement("button")}} 时从剪贴板设置 id 为"output"
的 {{HTMLElement("textarea")}} 的内容,可以使用这样的代码:要在用户单机 id 为
"paste"
的 {{HTMLElement("button")}} 时从剪贴板设置 id 为"output"
的 {{HTMLElement("textarea")}} 的内容,可以使用这样的代码:function paste() { var pasteText = document.querySelector("#output"); @@ -145,7 +145,7 @@
使用 Clipboard API
剪贴板 API 的 {{domxref("Clipboard.readText", "navigator.clipboard.readText()")}} 和 {{domxref("Clipboard.read", "navigator.clipboard.read()")}} 方法让你从剪贴板读取任意文本或二进制数据。这让你从剪贴板访问数据无需将它们粘贴至一个可编辑的元素中。
-一旦你通过 Permissions API 获取了
+"clipboard-read"
权限,你就可以轻松读取剪贴板:一旦你通过 Permissions API 获取了
"clipboard-read"
权限,你就可以轻松读取剪贴板:diff --git a/files/zh-cn/mozilla/add-ons/webextensions/intercept_http_requests/index.html b/files/zh-cn/mozilla/add-ons/webextensions/intercept_http_requests/index.html index 1e1c155db3e317..8481509f4fa827 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/intercept_http_requests/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/intercept_http_requests/index.html @@ -1,5 +1,5 @@ --- -title: 拦截HTTP请求 +title: 拦截 HTTP 请求 slug: Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests tags: - Add-ons @@ -9,12 +9,12 @@ ---navigator.clipboard.readText().then(clipText => document.getElementById("outbox").innerText = clipText);
{{AddonSidebar}}-使用 {{WebExtAPIRef("webRequest")}} API可以拦截HTTP请求。该API允许开发者植入一个侦听器用以侦听各个阶段的HTTP请求。在侦听器中,你能:
+使用 {{WebExtAPIRef("webRequest")}} API 可以拦截 HTTP 请求。该 API 允许开发者植入一个侦听器用以侦听各个阶段的 HTTP 请求。在侦听器中,你能:
-
- 获取请求及其返回的header和body
+- 获取请求及其返回的 header 和 body
- 取消或重定向请求
-- 修改请求及其返回的header
+- 修改请求及其返回的 header
本文将探究
@@ -22,12 +22,12 @@webRequest
模型的三种用法:
- 登陆请求的构造
- 重定向请求
-- 修改请求的header
+- 修改请求的 header
记录请求的 URL
-新建一个名为
+“
requests”
的目录,在其中新建一个名为“
manifest.json”
的文件,文件包含如下 内容 :新建一个名为
“
requests”
的目录,在其中新建一个名为“
manifest.json”
的文件,文件包含如下 内容:{ "description": "Demonstrating webRequests", @@ -58,15 +58,15 @@-记录请求的 URL
这里我们在请求开始之前用{{WebExtAPIRef("webRequest.onBeforeRequest", "onBeforeRequest")}}调用
+logURL()
函数。logURL()
函数
抓取从事件对象发出的请求中的URL,然后将其打印到浏览器的控制台窗口中。参数{urls: ["<all_urls>"]}
表示拦截发往所有URL的HTTP请求。这里我们在请求开始之前用{{WebExtAPIRef("webRequest.onBeforeRequest", "onBeforeRequest")}}调用
-logURL()
函数。logURL()
函数
抓取从事件对象发出的请求中的 URL,然后将其打印到浏览器的控制台窗口中。参数{urls: ["<all_urls>"]}
表示拦截发往所有 URL 的 HTTP 请求。测试方法是:安装该WebExtension, 打开浏览器的控制台,然后开启某个网页即可。在浏览器控制台中就能见到浏览器请求所有资源的URL:
+测试方法是:安装该 WebExtension, 打开浏览器的控制台,然后开启某个网页即可。在浏览器控制台中就能见到浏览器请求所有资源的 URL:
{{EmbedYouTube("X3rMgkRkB1Q")}}
重定向请求
-现在让我们用
+webRequest
来重定向HTTP请求。首先将manifest.json文件内容替换如下:现在让我们用
webRequest
来重定向 HTTP 请求。首先将 manifest.json 文件内容替换如下:{ @@ -106,13 +106,13 @@-重定向请求
["blocking"] );此外在请求构造出来之前我们用{{WebExtAPIRef("webRequest.onBeforeRequest", "onBeforeRequest")}}事件侦听器来实现URL替换。侦听器将会用
+redirectUrl
指定的内容替换原有的URL。此外在请求构造出来之前我们用{{WebExtAPIRef("webRequest.onBeforeRequest", "onBeforeRequest")}}事件侦听器来实现 URL 替换。侦听器将会用
-redirectUrl
指定的内容替换原有的 URL。这次我们不拦截所有的请求:
+{urls:[pattern], types:["image"]}
选项告诉浏览器必须同时满足如下两点的请求才会被拦截:(1)在“
https://mdn.mozillademos.org/”
之下的URL; (2)图片资源。该功能的更多说明参见{{WebExtAPIRef("webRequest.RequestFilter")}}。这次我们不拦截所有的请求:
{urls:[pattern], types:["image"]}
选项告诉浏览器必须同时满足如下两点的请求才会被拦截:(1) 在“
https://mdn.mozillademos.org/”
之下的 URL; (2) 图片资源。该功能的更多说明参见{{WebExtAPIRef("webRequest.RequestFilter")}}。刚才我们忽略了
-“blocking
”
选项。要修改请求就要用到“blocking
”
选项,该选项让侦听器函数阻塞住发往网络请求,浏览器将会等待侦听器返回才会继续处理。阅读{{WebExtAPIRef("webRequest.onBeforeRequest")}}以了解更多有关“blocking
”
的细节。.测试时打开MDN上的一个包含诸多图片的页面(如https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor ),重新加载WebExtension,然后重新加载这个页面:
+测试时打开 MDN 上的一个包含诸多图片的页面(如https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor ),重新加载WebExtension,然后重新加载这个页面:
{{EmbedYouTube("ix5RrXGr0wA")}}
@@ -122,7 +122,7 @@修改请求报头
"manifest.json" 可以与上一个例子相同。
-修改"background.js" 如下:
+修改"background.js" 如下:
var targetPage = "http://useragentstring.com/*"; @@ -145,11 +145,11 @@修改请求报头
在请求报头被发送前,我们使用 {{WebExtAPIRef("webRequest.onBeforeSendHeaders", "onBeforeSendHeaders")}} 事件监听器来运行一个函数。
-只有在向匹配的URL格式的网页发送请求时,这个监听函数才会运行。 还需注意的是,我们再次使用了
+"blocking"
选项。我们还使用了"requestHeaders"
选项,使监听器可以传递我们希望的请求报头数组。了解更多{{WebExtAPIRef("webRequest.onBeforeSendHeaders")}}的信息。只有在向匹配的 URL 格式的网页发送请求时,这个监听函数才会运行。还需注意的是,我们再次使用了
-"blocking"
选项。我们还使用了"requestHeaders"
选项,使监听器可以传递我们希望的请求报头数组。了解更多{{WebExtAPIRef("webRequest.onBeforeSendHeaders")}}的信息。侦听函数在请求报头数组中寻找 "User-Agent" 报头,用
+ua
变量替换它的值,然后返回修改后的报头数组 。现在这个修改后的数组会被发送到服务器。侦听函数在请求报头数组中寻找 "User-Agent" 报头,用
-ua
变量替换它的值,然后返回修改后的报头数组。现在这个修改后的数组会被发送到服务器。要测试它,先打开 useragentstring.com网址,检查标识浏览器是否为火狐浏览器 。然后加载附加组件, 刷新网址,再次检查标识浏览器,你会发现火狐浏览器被定义为 Opera了:
+要测试它,先打开 useragentstring.com网址,检查标识浏览器是否为火狐浏览器。然后加载附加组件,刷新网址,再次检查标识浏览器,你会发现火狐浏览器被定义为 Opera 了:
{{EmbedYouTube("SrSNS1-FIx0")}}
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/internationalization/index.html b/files/zh-cn/mozilla/add-ons/webextensions/internationalization/index.html index 4ec438fefd995e..acc35857bc0f5b 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/internationalization/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/internationalization/index.html @@ -68,7 +68,7 @@在 _locales 中提供本
你可以使用Language subtag lookup page上的查找工具查询语言子标签。请注意,你需要搜索语言的英语名称。每个 i18n 系统都需要你提供想支持的各语言区域的已翻译字符串。 在 WebExtensions 中,这些字符串放在一个名为
+_locales
的目录中,_locales
目录则位于扩展的根目录。每个语言区域都有一个名叫messages.json
的文件,其中包含相应的字符串(在 WebExtension 中称作“消息”),这个文件放在_locales
的子目录下,子目录以对应语言区域的语言子标签来命名。每个 i18n 系统都需要你提供想支持的各语言区域的已翻译字符串。在 WebExtensions 中,这些字符串放在一个名为
_locales
的目录中,_locales
目录则位于扩展的根目录。每个语言区域都有一个名叫messages.json
的文件,其中包含相应的字符串(在 WebExtension 中称作“消息”),这个文件放在_locales
的子目录下,子目录以对应语言区域的语言子标签来命名。注意,如果子标签包含一个基本语言和一个区域变种,那么语言与变种之间通常会以连字号隔开,例如 "en-US"。但作为
@@ -186,7 +186,7 @@_locales
的子目录,它必须采用下划线来分隔,如 "en_US"。从 JavaScript 检索消息字符
-
"placeholders"
这个成员定义了所有的占位符,以及它们所检索的来源。"url"
这个占位符指定了其内容取自 $1,它就是getMessage() 第二个参数里的第一个值。由于占位符就叫做
"url",我们就在实际的消息字符串中用
$URL$
调用它("name"
用$NAME$
调用也是一样的,以此类推)。对于多个占位符,你可以将其置于数组内,并作为第二个参数传递到 {{WebExtAPIRef("i18n.getMessage()")}} —[a, b, c]
可替换为$1
,$2
, and$3,以此类推,并置于
messages.json
内。接下来我们看一个例子:在
+en/messages.json 文件中
原始的notificationContent
消息字符串如下: in theen/messages.json
file is接下来我们看一个例子:在
en/messages.json 文件中
原始的notificationContent
消息字符串如下:in theen/messages.json
file is您点击了 $URL$。diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/author/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/author/index.html index e0d8884ad6e8e4..0d1adc118409c1 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/author/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/author/index.html @@ -27,7 +27,7 @@附加组件的作者, 用于在浏览器用户界面上显示, 这样别人下载安装使用该附加组件的时候, 就能看见你的大名了.
+附加组件的作者,用于在浏览器用户界面上显示,这样别人下载安装使用该附加组件的时候,就能看见你的大名了。
示例
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/background/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/background/index.html index 9f41f127e771f9..1e515ffdded573 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/background/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/background/index.html @@ -30,13 +30,13 @@通过background 键来给您的扩展程序引入一个或者多个后台脚本文件,以及一个可选的后台页面文件。
+通过 background 键来给您的扩展程序引入一个或者多个后台脚本文件,以及一个可选的后台页面文件。
后台脚本放置的是需要长期保持状态,或者需要执行长期的操作,并且与任意特定网页或者浏览器窗口的生命周期无关的代码。
-后台脚本会在扩展程序被加载后立即被加载,并且一直保持被加载状态,只有在扩展程序被禁止或者卸载的时候才停止运行。只要您获得了必要的许可permissions,您可以在该脚本中使用任意的扩展程序API。
+后台脚本会在扩展程序被加载后立即被加载,并且一直保持被加载状态,只有在扩展程序被禁止或者卸载的时候才停止运行。只要您获得了必要的许可permissions,您可以在该脚本中使用任意的扩展程序 API。
-浏览Anatomy of a WebExtension中的Background pages部分以获取更多的细节。
+浏览Anatomy of a WebExtension中的 Background pages 部分以获取更多的细节。
background 键最多只能拥有以下的两个属性,两个属性都是可选属性:
@@ -45,13 +45,13 @@"scripts"
- 一个字符串数组,数组中的每个字符串都是JavaScript源文件相对于manifest.json的相对路径,JavaScript源文件便是些被包含在扩展程序中的后台脚本文件。
+一个字符串数组,数组中的每个字符串都是 JavaScript 源文件相对于 manifest.json 的相对路径,JavaScript 源文件便是些被包含在扩展程序中的后台脚本文件。
脚本共享相同的全局窗口
脚本按照在数组中的顺序进行加载
-注意在低于Firefox 50版本的浏览器下会出现一个问题:当Firefox debugger已经打开时,脚本并不能总是按照数组中定义的顺序进行加载。若要解决这个问题,您可以使用page属性,用<script>标签将后台脚本文件从页面中加载进来。这个问题已经在Firefox 50中被修复。
+注意在低于 Firefox 50 版本的浏览器下会出现一个问题:当 Firefox debugger 已经打开时,脚本并不能总是按照数组中定义的顺序进行加载。若要解决这个问题,您可以使用 page 属性,用<script>标签将后台脚本文件从页面中加载进来。这个问题已经在 Firefox 50 中被修复。
@@ -69,13 +69,13 @@ 示例
-加载2个后台脚本文件.
+加载 2 个后台脚本文件。
"background": { "scripts": ["jquery.js", "my-background.js"] }-加载1个自定义的后台页面文件.
+加载 1 个自定义的后台页面文件。
"background": { "page": "my-background.html" diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_action/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_action/index.html index f2e1ff07d1dfc3..4f41b809426292 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_action/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_action/index.html @@ -149,7 +149,7 @@选择图标大小
浏览器按钮的图标在不同上下文中可能需要以不同大小显示:
-
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_specific_settings/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_specific_settings/index.html index 1fa787c703633c..73c8605fbb4759 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_specific_settings/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/browser_specific_settings/index.html @@ -9,7 +9,7 @@- 图标默认是在浏览器工具栏中显示,但用户能把它挪到浏览器菜单面板里(那个在用户点击 “汉堡” 图标时打开的面板)。工具栏里的图标比菜单面板里的图标小。
+- 图标默认是在浏览器工具栏中显示,但用户能把它挪到浏览器菜单面板里(那个在用户点击“汉堡”图标时打开的面板)。工具栏里的图标比菜单面板里的图标小。
- 在像 Retina 屏的高密度显示器上,图标大要两倍。
{{AddonSidebar}}-注意这个key不被Blink-based浏览器(Google Chrome和Opera)支持。如果你在插件中包含了这个key,当在这些浏览器中调用时虽然能用但是会显示警告。
+注意这个 key 不被 Blink-based 浏览器 (Google Chrome 和 Opera) 支持。如果你在插件中包含了这个 key,当在这些浏览器中调用时虽然能用但是会显示警告。
@@ -20,7 +20,7 @@
-强制性 -通常不做强制性要求(详细参见When do you need an Add-on ID?)。在Firefox 48版本之前为强制要求。 +通常不做强制性要求(详细参见When do you need an Add-on ID?)。在 Firefox 48 版本之前为强制要求。 示例 @@ -37,24 +37,24 @@+
applications
key包含特定于主机应用程序的键。-
applications
key 包含特定于主机应用程序的键。目前只包含了一个key:
+gecko
,其中包含了4个attributes:目前只包含了一个 key:
gecko
,其中包含了 4 个 attributes:-
-- -
id
即extension ID。从Firefox 48起为可选项,在此之前为强制必须项。参看WebExtensions and the Add-on ID来确认何时需要定义附加组件ID。- -
strict_min_version
: Gecko所能支持的最小版本号。不允许使用"*"来定义版本号。默认值为 "42a1"。- -
strict_max_version
: Gecko所能支持的最大版本号。如果安装或运行附加组件的Firefox版本号高于这个最大版本号,附加组件将不能运行或不允许被安装。默认值为"*",意思为不对最大版本号做检查。- +
update_url
为链接到add-on update manifest的链接。注意链接必须以"https"开头。这是为了使你自己就能够管理附加组件的更新(如不通过AMO)。- +
id
即extension ID。从 Firefox 48 起为可选项,在此之前为强制必须项。参看WebExtensions and the Add-on ID来确认何时需要定义附加组件 ID。- +
strict_min_version
: Gecko 所能支持的最小版本号。不允许使用"*"来定义版本号。默认值为 "42a1"。- +
strict_max_version
: Gecko 所能支持的最大版本号。如果安装或运行附加组件的 Firefox 版本号高于这个最大版本号,附加组件将不能运行或不允许被安装。默认值为"*",意思为不对最大版本号做检查。update_url
为链接到add-on update manifest的链接。注意链接必须以"https"开头。这是为了使你自己就能够管理附加组件的更新 (如不通过 AMO)。Chrome不兼容性
+Chrome 不兼容性
-你不能在Chrome附加组件中使用这个key。
+你不能在 Chrome 附加组件中使用这个 key。
示例
-示例中包含了所有可能的key。注意你通常不会包含
+strict_max_version
或update_url
key在大部分附加组件中。示例中包含了所有可能的 key。注意你通常不会包含
strict_max_version
或update_url
key 在大部分附加组件中。"applications": { "gecko": { diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/content_scripts/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/content_scripts/index.html index f272c2d0a5c7a2..51a1c6dc201490 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/content_scripts/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/content_scripts/index.html @@ -40,7 +40,7 @@
- -
必须包含一个名为
+matches
的键,指定要加载脚本的URL的格式必须包含一个名为
matches
的键,指定要加载脚本的 URL 的格式可以包含一个名为
@@ -69,51 +69,51 @@js
或css
的键,列出要加载到匹配页面的脚本-
false
: 仅注入到顶层默认为false
+默认为 false
css
Array
- 一个数组,包含将会被注入到匹配页面的CSS文件的路径(路径相对于manifest.json)。
+一个数组,包含将会被注入到匹配页面的 CSS 文件的路径(路径相对于 manifest.json)。
-在加载DOM之前,文件将会按指定的顺序注入。
+在加载 DOM 之前,文件将会按指定的顺序注入。
exclude_globs
Array
- Firefox 自48版本开始支持globs+Firefox 自 48 版本开始支持 globs-包含通配符的字符串数组。 请参阅下面的匹配URL格式。
+包含通配符的字符串数组。请参阅下面的匹配 URL 格式。
exclude_matches
- Array
一个match patterns的数组,请参阅下面的匹配URL格式。 +一个match patterns的数组,请参阅下面的匹配 URL 格式。 include_globs
Array
- +Firefox 自48版本开始支持globs- 包含通配符的字符串数组。 请参阅下面的匹配URL格式。Firefox 自 48 版本开始支持 globs+ 包含通配符的字符串数组。请参阅下面的匹配 URL 格式。- js
Array
- @@ -122,7 +122,7 @@一个数组,包含将会被注入到匹配页面的JS文件的路径(路径相对于manifest.json)。
+一个数组,包含将会被注入到匹配页面的 JS 文件的路径(路径相对于 manifest.json)。
-文件将会按指定的顺序注入。这意味着如果你想在另一个脚本中包含jQuery,可以这样做:
+文件将会按指定的顺序注入。这意味着如果你想在另一个脚本中包含 jQuery,可以这样做:
-"js": ["jquery.js", "my-content-script.js"]
接下来,
+"my-content-script.js"
可以使用jQuery.接下来,
"my-content-script.js"
可以使用 jQuery.文件将在run_at指定的时间注入。
matches
Array
- @@ -134,22 +134,22 @@一个match patterns的数组,请参阅下面的匹配URL格式。
+一个match patterns的数组,请参阅下面的匹配 URL 格式。
这是唯一的必须键。
此选项指定在“js”键中的脚本何时被注入。您可以使用下列的三个字符串之一,每个字符串都代表加载文档过程中的不同状态。状态直接对应于{{domxref("Document/readyState", "Document.readyState")}}:
-
- “
-document_start
”:对应于正在加载。 DOM仍在加载中。- “
-document_end
”:对应于可交互。 DOM已完成加载,但脚本和图像等资源可能仍在加载。- “
+document_idle
”:对应完成。 文档及其所有资源已完成加载。- “
+document_start
”:对应于正在加载。DOM 仍在加载中。- “
+document_end
”:对应于可交互。DOM 已完成加载,但脚本和图像等资源可能仍在加载。- “
document_idle
”:对应完成。文档及其所有资源已完成加载。默认值为“document_idle”。
- +匹配URL格式
+匹配 URL 格式
-“content_scripts”键基于URL匹配将content scripts注入到网页上:如果网页的URL与键中的规则匹配,则将注入脚本。“content_scripts”中有四个属性,可以用于此规则:
+“content_scripts”键基于 URL 匹配将 content scripts 注入到网页上:如果网页的 URL 与键中的规则匹配,则将注入脚本。“content_scripts”中有四个属性,可以用于此规则:
- @@ -164,20 +164,20 @@
matches
: 一个关于match patterns的数组匹配URL格式
"http://example.org/"和"http://example.com/"都将会匹配
-由于matches是唯一的强制性键,其他三个键用于进一步限制匹配的URL。要匹配作为一个整体的键,网址必须:
+由于 matches 是唯一的强制性键,其他三个键用于进一步限制匹配的 URL。要匹配作为一个整体的键,网址必须:
-
- 匹配matches属性
-- 并且,匹配include_globs属性(如果有)
+- 匹配 matches 属性
+- 并且,匹配 include_globs 属性(如果有)
- 并且,不匹配
exclude_matches
属性(如果有)- 并且,不匹配
exclude_globs
属性(如果有)globs
-Firefox 自48版本开始支持globs+Firefox 自 48 版本开始支持 globs-glob只是一个可以包含通配符的字符串。 有两种类型的通配符,您可以在一个glob中组合使用它们:
+glob 只是一个可以包含通配符的字符串。有两种类型的通配符,您可以在一个 glob 中组合使用它们:
- "*" 匹配零个或多个字符
@@ -195,7 +195,7 @@示例
} ] -这会将content脚本“borderify.js”插入到“mozilla.org”或其任何子域下的所有页面,无论是HTTP还是HTTPS。
+这会将 content 脚本“borderify.js”插入到“mozilla.org”或其任何子域下的所有页面,无论是 HTTP 还是 HTTPS。
"content_scripts": [ { @@ -205,9 +205,9 @@-示例
} ]这会将两个content脚本插入到“mozilla.org”及其任何子域(除“developer.mozilla.org”外)的所有页面中,无论是通过HTTP还是HTTPS。
+这会将两个 content 脚本插入到“mozilla.org”及其任何子域(除“developer.mozilla.org”外)的所有页面中,无论是通过 HTTP 还是 HTTPS。
-content脚本有相同的DOM视图,并按照它们在数组中出现的顺序注入,因此“borderify.js”可以访问由“jquery.js”添加的全局变量。
+content 脚本有相同的 DOM 视图,并按照它们在数组中出现的顺序注入,因此“borderify.js”可以访问由“jquery.js”添加的全局变量。
Browser compatibility
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/default_locale/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/default_locale/index.html index f4d09005f8d6ea..ddfd78169935d0 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/default_locale/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/default_locale/index.html @@ -15,7 +15,7 @@强制性 -可能发生的:如果存在_locales子目录,必须存在,否则不存在。 +可能发生的:如果存在_locales 子目录,必须存在,否则不存在。 - 例子 @@ -27,7 +27,7 @@ -如果扩展名包含_locales目录,则该key必须存在,否则不得存在。它标识 _locales的一个子目录,该子目录将用于查找扩展名的默认字符串。
+如果扩展名包含_locales 目录,则该 key 必须存在,否则不得存在。它标识 _locales 的一个子目录,该子目录将用于查找扩展名的默认字符串。
见 国际化 。
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/description/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/description/index.html index 7c3df90be0506d..989a611b58d52d 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/description/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/description/index.html @@ -22,19 +22,19 @@示例 -"description": "附加组件的主要功能特性的简短描述."+"description": "附加组件的主要功能特性的简短描述。"用于在用户下载安装使用界面中显示的一段简短的关于该附加组件的描述.
+用于在用户下载安装使用界面中显示的一段简短的关于该附加组件的描述。
-关于本地化, 可查看 localizable property.
+关于本地化,可查看 localizable property.
示例
-"description": "附加组件的主要功能特性的简短描述."+"description": "附加组件的主要功能特性的简短描述。"Browser compatibility
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/name/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/name/index.html index e8d40c3e2415c4..1af34e2cde49bc 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/name/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/name/index.html @@ -28,9 +28,9 @@ -附加组件的名称. 用于在用户界面和 addons.mozilla.org 网站上显示标识名称.
+附加组件的名称。用于在用户界面和 addons.mozilla.org 网站上显示标识名称。
-关于本地化, 可查看 localizable property.
+关于本地化,可查看 localizable property.
示例
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/permissions/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/permissions/index.html index 4fb4309cc26d76..36edb5e219e812 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/permissions/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/permissions/index.html @@ -31,11 +31,11 @@ -使用permissions 关键字为你的扩展请求特殊的权限。该关键字为一个字符串数列,每个字符串请求一项权限。
+使用 permissions 关键字为你的扩展请求特殊的权限。该关键字为一个字符串数列,每个字符串请求一项权限。
如果你使用该关键字请求权限,浏览器可能会在安装该扩展时通知用户该扩展需求某些权限,并询问他们是否愿意给予这些权限。在插件安装之后浏览器也可能允许用户检查扩展的权限。因为要求授予权限可能会影响用户安装你的扩展的意愿,所以请求权限需要特别小心的考虑。举个例子,你想要避免请求不必要的权限,而且可以在你的扩展描述中提供你为何需要某些权限的信息。更多关于这个话题的描述你可以参考这篇提供的文章 请求正确的权限。
-该关键字能够包含三种类型的权限:
+该关键字能够包含三种类型的权限:
- 主机权限
@@ -47,21 +47,21 @@主机权限
主机权限使用 match patterns 指定,扩展在每一个表达式指定的网址上请求额外权限。
-额外权限包括:
+额外权限包括:
-
-- XMLHttpRequest 和 fetch 用于访问无跨源限制的源文件(包括从content scripts发出的访问请求)
+- XMLHttpRequest 和 fetch 用于访问无跨源限制的源文件(包括从 content scripts 发出的访问请求)
- 以编程方式(使用 tabs.executeScript)将脚本注入到来自源服务器(origins)提供的页面的功能。
- 使用 webRequest 在其主机上获取消息的能力。
-- 使用 cookies API 访问主机cookies的能力,只要 cookies api的权限也被请求。
-- 使用无通配符(*)的全域名会绕开跟踪保护机制,但不能与
+<all_urls>
共用.- 使用 cookies API 访问主机 cookies 的能力,只要 cookies api 的权限也被请求。
+- 使用无通配符(*)的全域名会绕开跟踪保护机制,但不能与
<all_urls>
共用。Firefox浏览器,自56以后的版本,扩展都会自动获取其源的主机权限,如以下形式:
+Firefox 浏览器,自 56 以后的版本,扩展都会自动获取其源的主机权限,如以下形式:
-moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/
+
60a20a9b-1ad4-af49-9b6c-c64c98c37920
是扩展内部ID。编程时可使用 extension.getURL() 来返回此URL路径:
60a20a9b-1ad4-af49-9b6c-c64c98c37920
是扩展内部 ID。编程时可使用 extension.getURL() 来返回此 URL 路径:
- @@ -72,9 +72,9 @@
主机权限
API 权限
-API 权限有关键字指定,每个关键字标志着一类WebExtension API 能够被使用。
+API 权限有关键字指定,每个关键字标志着一类 WebExtension API 能够被使用。
-如下关键字是当前可用的:
+如下关键字是当前可用的:
-
- @@ -109,11 +109,11 @@
activeTab
API 权限
webRequestBlocking
在大部分情况下这种权限仅仅允许你访问API,除了以下情况:
+在大部分情况下这种权限仅仅允许你访问 API,除了以下情况:
-
@@ -121,7 +121,7 @@- -
tabs
让你可以访问一部分特权API
:Tab.url
,Tab.title
, andTab.faviconUrl
。在Firefox中你也需要tabs
来将queryInfo中的url参数加入tabs.query()
. 剩余的tabs
API能在不要求任何权限的情况被使用- +
webRequestBlocking
允许你是用“blocking”参数,所以你可以 修改或取消requests.- +
tabs
让你可以访问一部分特权API
:Tab.url
,Tab.title
, andTab.faviconUrl
。在 Firefox 中你也需要tabs
来将 queryInfo 中的 url 参数加入tabs.query()
. 剩余的tabs
API 能在不要求任何权限的情况被使用webRequestBlocking
允许你是用“blocking”参数,所以你可以 修改或取消 requests.downloads.open
让你使用 {{WebExtAPIRef("downloads.open()")}} API.活动标签权限
该权限被指定为
-“activeTab”
。如果一个扩展拥有activeTab
权限,当用户跟该扩展交互时,扩展仅在活动标签被赋予额外权限。“用户交互”包括:
+“用户交互”包括:
-
- 用户点击扩展的浏览器按钮或者页面按钮
@@ -129,18 +129,18 @@活动标签权限
- 用户敲击了扩展定义的快捷键
额外特权包括:
+额外特权包括:
-
- 插入JavaScript或者CSS的能力, 使用
-browser.tabs.executeScript
和browser.tabs.insertCSS
- 为当前标签访问tabs API权限部分的能力,包括:Tab.url,Tab.title, 和Tab .faviconUrl。
+- 插入 JavaScript 或者 CSS 的能力,使用
+browser.tabs.executeScript
和browser.tabs.insertCSS
- 为当前标签访问 tabs API 权限部分的能力,包括:Tab.url,Tab.title, 和 Tab .faviconUrl。
改权限的目的是为了在不给予扩展太多权限的情况下,使得扩展能够应付大部分情况。很多扩展需要在用户要求时,在当前页面做一些处理,比如,考虑一个扩展想要在用户点击一个浏览器按钮时在当前页面运行一个脚本,如果 activeTab 权限不存在,扩展将需要请求主机权限<all_urls>,但是这给予了扩展超过其需要的权限:现在它可以在任何任何时间标签页执行脚本任何次,而不是仅仅在活动标签而且仅仅回应用户的行为。
剪贴板访问
-有两种权限使得WebExtentsion可以跟剪贴板交互:
+有两种权限使得 WebExtentsion 可以跟剪贴板交互:
- @@ -151,11 +151,11 @@
clipboardWrite
: 使用document.execCommand("copy")
或document.execCommand("cut")
向剪贴板写入剪贴板访问
无限制存储
-+
unlimitedStorage
权限:
unlimitedStorage
权限:-
- 能使扩展突破{{WebExtAPIRef("storage.local")}} API设定的quota限制
-- Firefox浏览器中,无须提示用户授权,便可帮助扩展创建永久保存的IndexedDB数据库 "persistent" IndexedDB database
+- 能使扩展突破{{WebExtAPIRef("storage.local")}} API 设定的 quota 限制
+- Firefox 浏览器中,无须提示用户授权,便可帮助扩展创建永久保存的 IndexedDB 数据库 "persistent" IndexedDB database
@@ -165,11 +165,11 @@
示例
"permissions": ["*://developer.mozilla.org/*"]-请求 developer.mozilla.org 下的权限访问.
+请求 developer.mozilla.org 下的权限访问。
"permissions": ["tabs"]-请求tabs API的权限需要部分的访问。
+请求 tabs API 的权限需要部分的访问。
"permissions": ["*://developer.mozilla.org/*", "tabs"]@@ -177,6 +177,6 @@示例
浏览器兼容性
-本页的兼容列表是从结构化数据生成的。如果你想参与修改此数据,请参考 https://github.com/mdn/browser-compat-data 并发送pull 请求。
+本页的兼容列表是从结构化数据生成的。如果你想参与修改此数据,请参考 https://github.com/mdn/browser-compat-data 并发送 pull 请求。
{{Compat("webextensions.manifest.permissions")}}
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/short_name/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/short_name/index.html index 9f1067182d4d4a..0fd8af4a2285cd 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/short_name/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/short_name/index.html @@ -28,9 +28,9 @@ -附加组件的短名称. 一般用在 name 特性太长的情况下. 建议短名称的长度不要超过12个字符. 如果没有在 manifest.json 主文件中声明 short_name, 并且 name 特性的值又比较长的话, 用户界面显示的时候可能只会显示一部分.
+附加组件的短名称。一般用在 name 特性太长的情况下。建议短名称的长度不要超过 12 个字符。如果没有在 manifest.json 主文件中声明 short_name, 并且 name 特性的值又比较长的话,用户界面显示的时候可能只会显示一部分.
-关于本地化, 可查看 localizable property.
+关于本地化,可查看 localizable property.
示例
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/version/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/version/index.html index 16817974a06609..136756cc4d4063 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/version/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/version/index.html @@ -29,9 +29,9 @@ -附加组件的版本, 一般格式设置为由点分隔开来数字的ASCII字符串. 关于版本格式的详细信息, 请查看 Version format .
+附加组件的版本,一般格式设置为由点分隔开来数字的 ASCII 字符串。关于版本格式的详细信息,请查看 Version format .
-需要注意的是 Chrome 浏览器的 version 格式要求(the syntax defined for Chrome's
+version
)比 Firefox 浏览器的 version 格式更严格一些, 这意味这:需要注意的是 Chrome 浏览器的 version 格式要求 (the syntax defined for Chrome's
version
) 比 Firefox 浏览器的 version 格式更严格一些,这意味这:
- 对 Chrome 浏览器有效的 version 特性的值一定在 Firefox 浏览器中有效
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/web_accessible_resources/index.html b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/web_accessible_resources/index.html index eaa7ab1ea81b51..266b810a15cf10 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/web_accessible_resources/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/manifest.json/web_accessible_resources/index.html @@ -35,11 +35,11 @@描述
举个例子,Beastify example extension 将用户选择的野兽图片来替换网页,这些图片与应用是经过合并打包的。该应用添加
-<img>
,其src
指向图片,这样就使选中的图片可见了。网页要载入图片的话,这些图片就必须可经访问。通过
+web_accessible_resources
, 你列出资源,让它们可经网页访问。这些资源路径相对于 manifest.json 文件.通过
web_accessible_resources
,你列出资源,让它们可经网页访问。这些资源路径相对于 manifest.json 文件。注意,这其中不必包括 content scripts。
-如果你的应用要用 {{WebExtAPIRef("webRequest")}} 来重定向公共 URL(如 HTTPS) 到一个该应用中的页面, 那么应用必须将该页面列入
+web_accessible_resources
。如果你的应用要用 {{WebExtAPIRef("webRequest")}} 来重定向公共 URL(如 HTTPS) 到一个该应用中的页面,那么应用必须将该页面列入
web_accessible_resources
。使用 web_accessible_resources
diff --git a/files/zh-cn/mozilla/add-ons/webextensions/match_patterns/index.html b/files/zh-cn/mozilla/add-ons/webextensions/match_patterns/index.html index 44df7ebb7ffb98..b25fbc1049888a 100644 --- a/files/zh-cn/mozilla/add-ons/webextensions/match_patterns/index.html +++ b/files/zh-cn/mozilla/add-ons/webextensions/match_patterns/index.html @@ -9,19 +9,19 @@ ---{{AddonSidebar}}-匹配模式是一种指定网址组的方法:: 一个匹配模式匹配特定的一组URL。 它们由WebExtensions 在几个地方使用,最明显的是指定要将内容脚本加载到哪些文档中,并指定要向其中添加 webRequest 侦听器的URL。
+匹配模式是一种指定网址组的方法:: 一个匹配模式匹配特定的一组 URL。 它们由 WebExtensions 在几个地方使用,最明显的是指定要将内容脚本加载到哪些文档中,并指定要向其中添加 webRequest 侦听器的 URL。
-使用匹配模板的API通常接收一个匹配模板的列表,当URL匹配任何模式时会恰当的运行. 看个例子 在manifest.json中的
+content_scripts
关键字。使用匹配模板的 API 通常接收一个匹配模板的列表,当 URL 匹配任何模式时会恰当的运行。看个例子 在 manifest.json 中的
content_scripts
关键字。匹配模式结构
-所有的匹配模式用一个字符串来定义,而且都是"<all_urls>" 模板的一部份, 匹配模板包含三个部分: scheme, host, 和 path. scheme host 用 "://" 分隔。
+所有的匹配模式用一个字符串来定义,而且都是"<all_urls>" 模板的一部份,匹配模板包含三个部分:scheme, host, 和 path. scheme host 用 "://" 分隔。
<scheme>://<host><path>方案
-scheme 可能以下两种格式之一:
+scheme 可能以下两种格式之一: