Chrome 扩展 declarativeNetRequest、updateDynamicRules、添加的新规则的 id 永远不是唯一的

问题描述 投票:0回答:1

我想制作一个 chrome/edge 扩展,每当发出 URL 请求时(例如谷歌搜索,或在 URL 栏中输入搜索或网站等内容),检查它是否包含某些关键字,如果包含则阻止该请求。

到目前为止,所有语法都是正确的,但我在 Rule.id 属性上不断收到错误,但我找不到原因。

(async () => {
  await chrome.declarativeNetRequest.updateDynamicRules(
    // options
    {
        // Rule[]
        addRules: [
            // Rule
            {
                action: {
                    type: "block"
                },
                // RuleCondition
                condition: {
                    // string
                    urlFilter: "*youtube|test1*"
                },
                id: 1
            }
        ]
    }
  );
})();

“修复”是删除异步函数末尾的参数括号(因为 updateDynamicRules() 是一个承诺),但它不是一个函数,因此不会执行任何操作。 我尝试过的另一件事(这表明问题不是 Rule.id 本身)是将 id 设置为 1、2 和两倍随机数 - 每次我收到“错误:带有 id x 的规则没有一个独特的ID。”错误指针指向第 22 行,顺便说一句,这是代码结束的地方。

javascript google-chrome-extension microsoft-edge microsoft-edge-extension
1个回答
0
投票
  1. 这可能是您之前尝试的旧规则。该 API 不符合人体工程学,其开发人员拒绝了我简化它的想法,因此解决方案是 始终显式删除旧 id :

    await chrome.declarativeNetRequest.updateDynamicRules({
      removeRuleIds: [1],
      addRules: [{ 
        // .......................
      }],
    });
    
  2. 您的

    urlFilter
    无效。有效的值为
    "youtube"
    "test1"
    。如果您想匹配多个模式,则必须创建多个规则。

© www.soinside.com 2019 - 2024. All rights reserved.