javascript - 将 easylist 与 chrome declarativeNetRequest 一起使用
问题描述
我想使用easylist来阻止 chrome 扩展程序中的广告。有人建议我使用declarativeNetRequest
api 来完成任务,但我不确定如何进行。我已阅读文档,据我了解,我需要定义一个或多个用于阻止请求的规则。
我已向清单文件添加了必要的权限:
{
"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 自动创建所有需要的规则?任何人都可以通过提供一个例子来帮助我实现吗?
解决方案
declarativeNetRequest 规则集所遵循的格式与 easylist 不同,因此您必须将规则集转换为 declarativeNetRequest 所需的格式。
另请注意,动态规则的最大数量当前限制为5000,因此对 easylist 使用动态规则的方法可能不是首发。
我建议编写一个 python 脚本来解析 easylist 格式并将其转换为 declarativeNetRequest 静态规则集。这可以是扩展打包步骤的一部分。
github上似乎有几个过滤器列表解析器的示例。事实上,似乎有一个项目将 Adblock Plus 过滤器列表转换为 chrome.declarativeNetRequest 规则。见链接。
推荐阅读
- jsp - 如何使用 Java EE 显示结果
- clang - clang 中定义的所有内置宏在哪里?
- vue.js - VueJS:Chrome devtools 不会立即更新数组(在父组件中)。为什么?
- javascript - React 组件中的分页 API 调用
- docker - Docker ROS 自动启动启动文件
- python - Python:有效地将非负整数转换为 0 到 1 之间
- eclipse - 欢迎屏幕的eclipse插件问题
- python-2.7 - TFIDF 值是如何转换的
- google-sheets - 如果单元格匹配,则索引它们
- ios - _hidden 在 Crashlytics 上使用 Bitrise - iOS 应用程序崩溃