代码之家  ›  专栏  ›  技术社区  ›  nkhin

为什么带有declarativeNetRequest的modifyHeaders只能在iframe中工作?

  •  0
  • nkhin  · 技术社区  · 2 年前

    我正在编写一个Chrome扩展,它使用declarativeNetRequest API修改user-agent头。有趣的是,用户代理只针对iframe中的请求进行修改,如devtools中所示。我一定错过了什么/误解了什么。

    manifest.json

    {
        "name": "My extension",
        "version": "1.0.0",
        "manifest_version": 3,
        "description": "My extension",
        "homepage_url": "http://example.com",
        "content_scripts": [
         {
             "matches": ["http://*/*", "https://*/*"],
             "css": ["style.css"],
             "js": ["script.js"]
         }
        ],
        "declarative_net_request": {
        "rule_resources": [{
          "id": "modify-user-agent",
          "enabled": true,
          "path": "rules.json"
        }]
      },
        "icons": {
            "16": "icons/icon16.png",
            "48": "icons/icon48.png",
            "128": "icons/icon128.png"
        },
        "web_accessible_resources": [{
            "resources": [
                "redirect.html"
            ],
            "matches": [
                "*://*/*"
            ]
        }],
        "action":
        {
            "default_icon": "icons/icon48.png",
            "default_popup": "./src/index.html"
        },
        "default_locale": "en",
        "permissions": [
            "contentSettings",
            "tabs",
            "storage",
            "declarativeNetRequest",
            "declarativeNetRequestWithHostAccess"
        ],
        "host_permissions": [
        "*://*/*"
      ]
    }
    

    rules.json

    [{
        "id": 1,
        "priority": 1,
        "action": {
            "type": "modifyHeaders",
            "requestHeaders": [{
                "header": "User-Agent",
                "operation": "set",
                "value": "My User Agent"
          }]
        },
        "condition": {
            "urlFilter": "*://*/*"
        }
    }]
    

    更新:我修改了规则,并将resourceType包含在条件中:

    "resourceTypes": ["main_frame", "sub_frame"]
    

    这在主框架和iframe中都有效。但我仍然不明白为什么默认情况下它只适用于iframe。如果没有指定,我找不到任何关于resourceTypes默认值的文档。

    0 回复  |  直到 2 年前