# 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_pagesManifest 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还有其他的更改,就不一一列举了,列举了一些会用到的
