declarativeNetRequest更新规则

mik*_*iko 8 google-chrome google-chrome-extension

正如文档中所述,我正在尝试更新declarativeNetRequestchrome 扩展的规则。来自文档:

更新动态规则

chrome.declarativeNetRequest.updateDynamicRules(整数ruleIdsToRemove数组,规则rulesToAdd数组,函数回调)

修改扩展的当前动态规则集。首先删除具有在ruleIdsToRemove 中列出的ID 的规则,然后添加在rulesToAdd 中给出的规则。此更新作为单个原子操作发生:添加和删除所有指定的规则,或者返回错误。这些规则在浏览器会话和扩展更新之间持续存在。ruleIdsToRemove 中不存在的任何 id 将被忽略。请注意,无法使用此函数删除指定为扩展包一部分的静态规则。注意:MAX_NUMBER_OF_DYNAMIC_RULES 是扩展可以添加的动态规则的最大数量。

目前尚不清楚动态规则的目的是什么。此 API 将依赖于静态规则集,在更新扩展之前无法修改该规则集,并且文档中描述的方法表示扩展附带的规则不会从函数中删除。

我的问题是,从在线 api 获取新规则后,我如何真正更新规则?declarativeNetRequest api 没有提供任何方法来执行此操作,提供的所有方法对此范围都没有用。

Chi*_*Chi 14

在我花了一些时间弄清楚chrome.declarativeNetRequest.updateDynamicRules()API 的工作原理之后,我最终得到了这个解决方案。blockUrls是一个数组变量,保存所有被阻止的网站/URL。

blockUrls.forEach((domain, index) => {
  let id = index + 1;

  chrome.declarativeNetRequest.updateDynamicRules({
    addRules: [{
      "id": id,
      "priority": 1,
      "action": { "type": "block" },
      "condition": { "urlFilter": domain, "resourceTypes": ["main_frame"] }
    }],
    removeRuleIds: [id]
  });
});
Run Code Online (Sandbox Code Playgroud)

  • @RaedCHAMMAM文档说“首先删除ruleIdsToRemove中列出的ID规则,然后添加rulesToAdd中给出的规则”,所以他只是确保不会与已在使用的ID发生冲突。 (4认同)
  • @RaedCHAMMAM 为了避免重复的 ID。 (2认同)