我正在编写一个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默认值的文档。