# V3的配置更改
# Manifest version
更改"manifest_version"
元素的值是升级扩展的关键。这决定了您使用的是 Manifest V2 还是 Manifest V3 功能集:
// Manifest V2
{
...
"manifest_version": 2
...
}
// Manifest V3
{
...
"manifest_version": 3
...
}
# Service worker
在 Manifest V3 中,背景页面现在是服务工作者 (opens new window)。"background"
在该字段下注册服务人员。此字段使用"service_worker"
指定单个 JavaScript 文件的键。
// Manifest V2
{
...
"background": {
"scripts": [
"backgroundContextMenus.js",
"backgroundOauth.js"
],
"persistent": false
},
...
}
// Manifest V3
{
...
"background": {
"service_worker": "background.js",
"type": "module" //optional
}
...
}
TIP
即使 Manifest V3 不支持多个后台脚本,您也可以通过指定选择将服务工作者声明为ES 模块 (opens new window)"type": "module"
,这允许您导入更多代码。
# Host permissions
在 Manifest V3 中,您需要将主机权限和可选主机权限与其他权限分开指定。
// Manifest V2
{
...
"permissions": [
"tabs",
"bookmarks",
"http://www.blogger.com/",
],
"optional_permissions": [
"unlimitedStorage",
"*://*/*",
]
...
}
// Manifest V3
{
...
"permissions": [
"tabs",
"bookmarks"
],
"optional_permissions": [
"unlimitedStorage"
],
"host_permissions": [
"http://www.blogger.com/",
],
"optional_host_permissions": [
"*://*/*",
]
...
}
TIP
将匹配模式移至"host_permissions"
不影响内容脚本 (opens new window)。内容脚本匹配模式保留在"content_scripts.matches"
.
# Content security policy(CSP)
扩展的内容安全策略 (opens new window)(CSP) 在 Manifest V2 中指定为字符串;在 Manifest V3 中,它是一个对象,其成员代表替代 CSP 上下文:
// Manifest V2
{
...
"content_security_policy": "..."
...
}
// Manifest V3
{
...
"content_security_policy": {
"extension_pages": "...",
"sandbox": "..."
}
...
}
extension_pages
:此政策涵盖您的扩展程序中的页面,包括 html 文件和服务人员。
这些页面类型由chrome-extension://
协议提供。例如,您的扩展程序中的一个页面是chrome-extension://EXTENSION_ID/foo.html
.
sandbox
:此政策涵盖您的扩展程序使用的任何沙盒扩展程序页面 (opens new window)。
此外,Manifest V3 不允许extension_pages
Manifest V2 中允许的某些 CSP 修改。script-src,
object-src
和worker-src
指令只能具有以下值:
self
none
- 任何 localhost 源、(
http://localhost
、http://127.0.0.1
或这些域上的任何端口)
WARNING
script-src,
object-src
都不允许更改,只有worker-src
能更改,不能用XHR但是可以用fetch
CSP 修改sandbox
没有这样的新限制。
从 Chrome 10.2 开始,Manifest V3 扩展可以包含wasm-unsafe-eval
在 CSP 中,以使用作为扩展的一部分捆绑的 WebAssembly 文件。
# Action API unification
在 Manifest V2 中,有两种不同的 API 来实现操作:"browser_action"
和"page_action"
. 这些 API 在引入时扮演了不同的角色,但随着时间的推移它们变得多余,因此在 Manifest V3 中,我们将它们统一为单个"action"
API:
// Manifest V2
// manifest.json
{
...
"browser_action": { ... },
"page_action": { ... }
...
}
// background.js
chrome.browserAction.onClicked.addListener(tab => { ... });
chrome.pageAction.onClicked.addListener(tab => { ... });
// Manifest V3
// manifest.json
{
...
"action": { ... }
...
}
// background.js
chrome.action.onClicked.addListener(tab => { ... });
# Web-accessible resources
此更改将扩展资源的访问限制为特定站点/扩展。**您现在提供了一个对象数组,**而不是提供文件列表,每个对象都可以映射到一组资源到一组 URL 或扩展 ID:
// Manifest V2
{
...
"web_accessible_resources": [
RESOURCE_PATHS
]
...
}
// Manifest V3
{
...
"web_accessible_resources": [{
"resources": [RESOURCE_PATHS],
"matches": [MATCH_PATTERNS],
"extension_ids": [EXTENSION_IDS],
"use_dynamic_url": boolean //optional
}]
...
}
替换以下内容:
RESOURCE_PATHS
: 字符串列表,每个字符串都包含从扩展的根目录到给定资源的相对路径。MATCH_PATTERNS
:字符串列表,每个字符串都包含一个匹配模式 (opens new window),指定哪些站点可以访问这组资源。EXTENSION_IDS
:字符串列表,每个字符串都包含给定扩展的 ID。
以前,适用于所有网站和扩展的 Web 可访问资源列表。这为指纹识别或无意资源访问创造了机会。更新后的 API 让扩展更严格地控制其他站点或扩展可以访问扩展资源的内容。
有关使用信息,请参阅Web 可访问资源 (opens new window)文档
# 写在最后
其实manifest V3已经弃用了许多API,就不列出来了,可以去搜搜,当然V3还有其他的更改,就不一一列举了,列举了一些会用到的