# 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-srcworker-src指令只能具有以下值:

  • self
  • none
  • 任何 localhost 源、(http://localhosthttp://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还有其他的更改,就不一一列举了,列举了一些会用到的