首页 > 解决方案 > 将 easylist 与 chrome declarativeNetRequest 一起使用

问题描述

我想使用easylist来阻止 chrome 扩展程序中的广告。有人建议我使用declarativeNetRequestapi 来完成任务,但我不确定如何进行。我已阅读文档,据我了解,我需要定义一个或多个用于阻止请求的规则。

我已向清单文件添加了必要的权限:

{
  "manifest_version": 2,
  "name": "__MSG_extName__",
  "description": "__MSG_extDescription__",
  "default_locale": "en",
  "permissions": [
    "<all_urls>",
    "activeTab",
    "tabs",
    "notifications",
    "contextMenus",
    "proxy",
    "webRequest",
    "webRequestBlocking",
    "declarativeNetRequest"
  ],
  "declarative_net_request": {
    "rule_resources": [{
      "id": "ads_ruleset",
      "enabled": true,
      "path": "ads_rules.json"
    }]
  },
  "icons": {
    "16": "icons/16.png",
    "48": "icons/48.png",
    "128": "icons/128.png"
  },
  "background": {
    "scripts": ["js/background.js"],
    "persistent": true
  },
  "browser_action": {
    "default_popup": "popup.html"
  }
}

在我的后台脚本中,我正在使用 axios 获取列表:

lat adsBlacklist = [];

axios.get( 'https://github.com/easylist/easylist/blob/master/easylist/easylist_adservers.txt' ).then( (response) => {
 adsBlacklist.push(response.data);
});

我需要解决的第一个问题是如何从列表中删除不必要的行和单词,在列表中$third-party,一些 url 的末尾附加了单词! Third-party,并且在单词的开头也出现了两个不必要的行列出! Non-flagged (Revolving ad servers)它们对我的范围没有用的词,我不知道如何删除它们。

第二个问题是关于列表转换和使用。在得到它之后(并通过删除无用的信息来解析?),我需要一种方法来使用规则集中的 urls 模式,不幸的是它不支持规则数组,但只接受一个字符串进行匹配。目前我已将此 json 文件定义为我的默认规则集:

{
  "id" : 1,
  "priority": 1,
  "action" : { "type" : "block" },
  "condition" : {
    "urlFilter" : "||01dbf3a452b6.com^",
    "domains" : ["<all_urls>"],
    "resourceTypes" : ["main_frame", "sub_frame"]
  }
}

由于我不想手动编写所有规则,所以我想使用该updateDynamicRules方法,但我不确定如何继续,我已经在 chrome api 文档的示例部分中搜索了一个示例但是我什么也没找到。如何为列表中的每个 url 自动创建所有需要的规则?任何人都可以通过提供一个例子来帮助我实现吗?

标签: javascriptjsongoogle-chrome-extension

解决方案


declarativeNetRequest 规则集所遵循的格式与 easylist 不同,因此您必须将规则集转换为 declarativeNetRequest 所需的格式。

另请注意,动态规则的最大数量当前限制为5000,因此对 easylist 使用动态规则的方法可能不是首发。

我建议编写一个 python 脚本来解析 easylist 格式并将其转换为 declarativeNetRequest 静态规则集。这可以是扩展打包步骤的一部分。

github上似乎有几个过滤器列表解析器的示例。事实上,似乎有一个项目将 Adblock Plus 过滤器列表转换为 chrome.declarativeNetRequest 规则。见链接


推荐阅读