首页 > 解决方案 > 为什么 URL 重定向权限在 Chrome Manifest v2 中有效,但在 v3 中无效?

问题描述

我正在尝试使用 Chrome declarativeWebRequest API 重定向 URL,但它不起作用。

“权限”键中的匹配模式适用于 Manifest V2,但它现在Permission '*://www.youtube.com/*' is unknown or URL pattern is malformed在 V3 中引发错误。

清单.json:

{
  "manifest_version": 3,
  "name": "Redirect Test",
  "version": "0.0.1",
  "permissions": [
    "declarativeNetRequest",
    "*://www.youtube.com/*"
  ],
  "host_permissions": [
    "*://www.youtube.com/*"
  ],
  "declarative_net_request": {
    "rule_resources": [
      {
        "id": "1",
        "enabled": true,
        "path": "rules.json"
      }
    ]
  }
}

规则.json:

[
    {
        "id": 1,
        "priority": 1,
        "action": {
            "type": "redirect",
            "redirect": {"url": "https://www.google.com"}
        },
        "condition": {
            "urlFilter": "*://www.youtube.com/*",
            "resourceTypes": [
                "main_frame"
            ]
        }
    }
]

我正在使用 Chrome 88.0.4324.104

标签: google-chrome-extension

解决方案


发布时声明性网络请求的清单文档并不完全准确。

这是 文档中 manifest.json 中的 Permissions 键:

"permissions": [
    "declarativeNetRequest",
    "declarativeNetRequestFeedback",
    "*://example.com/*"
  ],

但是,应该只指定站点host_permissions

"host_permissions": [
    "*://example.com/*"
  ],

应该注意的是,这个显式声明只有action.redirect在像这个例子中那样指定时才是必要的:

{
        "id": 1,
        "priority": 3,
        "action": {
            "type": "redirect",
            "redirect": {
                "regexSubstitution": "www.youtube.com/embed/"
            }
        },
        "condition": {
            "regexFilter": "(www\\.youtube\\.com\/watch\\?v=)",
            "resourceTypes": [
                "main_frame"
            ]
        }
}

推荐阅读