マニフェストを更新する

V2 マニフェストを V3 マニフェストに変換する

Manifest V3 と Manifest V2 では、manifest.json ファイルの形式が若干異なります。このページでは、manifest.json ファイルにのみ影響する変更について説明します。ただし、スクリプトやページに対する変更の多くでは、マニフェストも変更する必要があります。これらの変更は、それを必要とする移行タスクでカバーされます。

マニフェストのバージョン番号を変更する

"manifest_version" フィールドの値を 2 から 3 に変更します。

Manifest V2
{
  ...
  "manifest_version": 2
  ...
}
Manifest V3
{
  ...
  "manifest_version": 3
  ...
}

ホストの権限を更新する

Manifest V3 のホスト権限は個別のフィールドであり、"permissions" または "optional_permissions" では指定しません。

コンテンツ スクリプト"content_scripts.matches" に残ります。"content_scripts.matches" については、静的宣言を使用したインジェクションをご覧ください。

Manifest V2
{
  ...
  "permissions": [
    "tabs",
    "bookmarks",
    "https://www.blogger.com/",
  ],
  "optional_permissions": [
    "unlimitedStorage",
    "*://*/*",
  ]
  ...
}
Manifest V3
{
  ...
  "permissions": [
    "tabs",
    "bookmarks"
  ],
  "optional_permissions": [
    "unlimitedStorage"
  ],
  "host_permissions": [
    "https://www.blogger.com/",
  ],
  "optional_host_permissions": [
    "*://*/*",
  ]
  ...
}

ウェブでアクセス可能なリソースを更新する

ウェブでアクセス可能なリソースとは、ウェブページや他の拡張機能がアクセスできる拡張機能内のファイルです。Manifest V2 で実装されている "web_accessible_resources" フィールドにより、リソースの公開が選択されている場合、ウェブサイトや攻撃者が拡張機能を検出できるようになりました。これにより、フィンガープリントや意図しないリソース アクセスの機会が生まれました。

Manifest V3 では、拡張機能のリソースにアクセスできるウェブサイトや拡張機能を制限することで、公開を制限しています。これまでと同様にファイルのリストを指定するのではなく、オブジェクトの配列を指定するようになりました。オブジェクトの配列は、一連のリソースを URL または拡張機能 ID のセットにマッピングします。

以下の例では、Manifest V2 と Manifest V3 のウェブでアクセス可能なリソースを比較しています。Manifest V2 では、デフォルトで、指定されたリソースにすべてのウェブサイトでアクセスできるようにしていました。以下に示す Manifest V3 コードでは、これらのリソースは https://example.com のみが使用でき、すべてのウェブサイトで特定の画像のみを使用できます。

詳しくは、ウェブでアクセス可能なリソース一致パターンをご覧ください。

Manifest V2
{
  ...
  "web_accessible_resources": [
    "images/*",
    "style/extension.css",
    "script/extension.js"
  ],
  ...
}
Manifest V3
{
  ...
    "web_accessible_resources": [
    {
      "resources": [
        "images/*"
      ],
      "matches": [
        "*://*/*"
      ]
    },
    {
      "resources": [
        "style/extension.css",
        "script/extension.js"
      ],
      "matches": [
        "https://example.com/*"
      ]
    }
  ],
  ...
}