【问题标题】:Why doesn't this declarative net request rule work?为什么这个声明性网络请求规则不起作用?
【发布时间】: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


【解决方案1】:

您需要将“Domains”标签更改为“requestDomains”或“initiatorDomains”,因为“Domains”标签已弃用。我假设 google.com 是你的发起者域,这意味着你想阻止所有发起的请求google.com 到任何目标网站。如果你想阻止 google.com 成为目标网站,即你想停止发出任何请求google.com,您需要改用“urlFilter”标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2020-10-15
    • 1970-01-01
    相关资源
    最近更新 更多