【发布时间】:2022-12-15 19:43:28
【问题描述】:
我试图阻止一个带有 chrome 扩展的网站,该扩展使用 Manifest V3 的新声明性网络请求 API,但它根本无法正常工作。我已经在清单中添加了权限,并确保添加了优先级、ID、操作和条件,但它仍然什么也没做。由于我只阻止一个域,我尝试将条件中的域列表从“域”更改为“域”,但这只会阻止每个域。这是我的清单的适用部分。我不确定为什么,但是当我在私人/隐身选项卡中打开网站时,它偶尔会起作用。
"declarative_net_request" : {
"rule_resources" : [{
"id": "rules1",
"enabled": true,
"path": "rules.json"
}]
},
"permissions": [
"declarativeNetRequest"
],
这是我的 rules.json 文件。
[{
"id": 1,
"priority": 1,
"action": {
"type": "block"
},
"condition": {
"domains": ["google.com"],
"resourceTypes": ["main_frame"]
}
}]
【问题讨论】:
-
将
"domains": ["google.com"]替换为"urlFilter": "||google.com/" -
哇,令人惊讶的是,这有效,为什么它有效但“域”却无效?问题是,在 YouTube 上尝试这样做,由于某种原因不起作用。
-
在 youtube 上以隐身模式尝试,它有效。如果您不是隐身模式,那么它在 YouTube 上不起作用。我试过清除浏览历史、缓存和cookies,但还是有这个问题。知道为什么吗?
-
1)
domains做了不同的事情,它是针对这个网站已经打开时提出的请求。 2) 尝试在 devtools -> Application 中取消注册 youtube 的 service worker,如果有帮助,请使用 chrome.browsingData.remove 在扩展程序的 onInstalled 侦听器中执行此操作。 -
我只是遇到了类似的问题,但原因不同。 Google Maps 使用 Service Worker 来缓存它的请求,
declarative_net_request不会触及它们。唯一的解决办法是清除数据,但很难向用户解释如何或为什么。
标签: google-chrome-extension chrome-extension-manifest-v3