javascript - 广告移除后修补 DOM - chrome 扩展
问题描述
我为谷歌浏览器创建了一个简单的广告拦截器,我正在对其进行测试。它似乎工作正常,并且会阻止使用webRequest
easylist 过滤器中的所有广告。
当删除的广告留下空白时,我正在寻找一种“修补”DOM网页的方法。由于无法预测这些横幅的 css id 和类是什么,我想问是否有办法实现这一点。我已经看到在easylist repo 上有一些过滤器列表将引用DOM 类和ID,但我不知道如何解析它们以在扩展中使用,有人可以建议我如何继续吗?
.replace()
我想使用正则表达式,但是在js 函数之后所需的值将丢失。列表如下所示:
###zoneAdserverSuper
###zoneAdvertisment
###zone_a_ad
###zone_b_ad
###zone_c_ads
###zztextad
##.AD-POST
##.AD-RC-300x250
##.AD-Rotate
##.AD-label300x250
##.AD300
##.AD300Block
##.AD300x250
看看这个列表的结构是链接
感谢您的帮助。
解决方案
如果要解析 REPO 上的整个列表,可以执行以下操作。
- 将数据放入数组。
- 删除以 a 开头的每一行
!
- 从字符串中删除前两个字符
##
- 根据选择器获取所有 DOM 元素
- 对他们做任何你想做的事...
PS如果您不请求列表但将其保存在扩展中,您可以事先执行此操作,这样您就不需要每次都通过代码解析它。只需将解析后的版本保存在扩展中即可。
const data = [
'##div[class^="backfill-taboola-home-slot-"]',
'! Tripadvisor',
'###MAIN.ShowTopic > .ad',
'! uCoz',
'! https://adblockplus.org/forum/viewtopic.php?f=2&t=13414',
'##div[id^="mainads"]',
'! yavli.com Sponsored content',
'##.__y_elastic .__y_item',
'##.__y_inner > .__y_item',
'##.__y_outer',
'##.__yinit .__y_item',
'##.__ywl .__y_item',
'##.__ywvr .__y_item',
'##.__zinit .__y_item',
'##.icons-rss-feed + .icons-rss-feed div[class$="_item"]',
'##.inlineNewsletterSubscription + .inlineNewsletterSubscription div[class$="_item"]',
'##.jobs-information-call-to-action + .jobs-information-call-to-action div[class$="_item"]',
'! Zergnet',
'###boxes-box-zergnet_module',
'###right_rail-zergnet',
'###zergnet',
'###zergnet-wrapper',
'##.ZERGNET',
];
const combined = data.filter((selector) => !selector.startsWith("!")).map((selector) => {
const domSelector = selector.slice(2, selector.length);
return domSelector ? [...document.querySelectorAll(domSelector)] : [];
}).flat();
console.log(combined);
<div class="backfill-taboola-home-slot-five">FAKE AD</div>
<div class="header">NOT AN AD</div>
<div class="__y_elastic">
<div class="__y_item">FAKE AD</div>
</div>
<div class="footer">NOT AN AD</div>
<div id="zergnet-wrapper">FAKE AD</div>
推荐阅读
- excel - Excel:如何在工作表中查找名称并在另一列上标记“是”
- python - ValueError:gbrt 必须是 BaseGradientBoosting 的一个实例
- mysql - 如何将datagridview内容汇总到数据库VB.net多个用户
- javascript - 通过列表ajax加载表
- google-sheets - Google 表格:计算唯一性,为他们提供 ID 并将 ID 推送到新列中
- python - 使用python按组查找置信区间
- apache-kafka - Apache Flink Kafka 集成分区分离
- abap - 当前用户可以查看的BUKRS列表
- javascript - 数组中子字符串的最大值
- java - 如何获取列表特定索引中的总项目数