前端如何判断浏览器 AdBlock/AdBlock Plus(最新版)广告屏蔽插件已开启拦截

2个月前AdBlock/AdBlock Plus疑似升级了一次

因为自己主要负责面对海外的用户项目,发现以前的检测AdBlock/AdBlock Plus开启状态方法已失效了,于是专门研究了一下。并尝试了很多方法。

已失效的老方法

// 定义一个检测 AdBlock 的函数
function checkAdBlock() {// 请求一个可能被 AdBlock 拦截含有/ad的路径接口fetch('xxxx/xxxx/ad').then(response => {if (!response.ok) {// 如果响应状态码不是 2xx,可能是被拦截了console.log('AdBlock 可能已启用,请求被拦截');} else {// 请求成功,AdBlock 未拦截console.log('AdBlock 未启用,请求成功');}}).catch(error => {// 如果请求失败,可能是被拦截了console.log('AdBlock 可能已启用,请求失败', error);});
}// 调用检测函数
checkAdBlock();

尝试方法1(亲测后全部无用)

github上开源的一些方法基本都试了都不行

1,f**kAdblock

2,adblockDetector

3,AdBlock Warning

4,AdGuard Detector

...

尝试方法2(亲测后也无用)

创建一个div元素并添加一个可能被AdBlock识别的类名 ad,ads之类的

// 创建一个div元素并添加一个可能被AdBlock识别的类名
var adTest = document.createElement('div');
adTest.className = 'ad ads ad-test1 adblock-test'; // ad,ads之类的
adTest.style.display = 'block'; // 明确设置display为block以检测是否被覆盖
adTest.style.position = 'absolute'; // 绝对定位以避免影响页面布局
adTest.style.top = '-9999px'; // 将元素移出视口以避免干扰用户
adTest.style.left = '-9999px';
adTest.style.width = '1px';
adTest.style.height = '1px';// 将元素添加到DOM中
document.body.appendChild(adTest);// 立即检查元素是否被隐藏(即display属性是否被更改为none)
var adblockActive = (adTest.offsetWidth <= 0 && adTest.offsetHeight <= 0) || adTest.style.display === 'none';// 根据检测结果执行相应操作
if (adblockActive) {console.log('检测到AdBlock开启了');// 这里可以添加代码来处理AdBlock被检测到的情况
} else {console.log('AdBlock没有开启');// 清理:从DOM中移除测试元素(可选,因为已经移出视口)document.body.removeChild(adTest);
}

尝试方法3(亲测后发现可行)

思考

突然想起了阮一峰的博客,发现一个网站“万维广告”。

但是我们的项目又不需要接入这些三方的工具啥的,只是为了检测adblock到底开启了没有,到底有没有拦截当前网站的资源。毕竟主动提示用户去设置白名单啥的还是效率太低太低了。
然后又发现最新版的AdBlock/AdBlock Plus默认规则会拦截含有ads域名的资源
于是尝试了一下

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>加载脚本检测</title><style>#load-error {color: red;display: none; /* 默认隐藏错误提示 */}</style>
</head>
<body><!-- 错误提示信息 --><div id="load-error">脚本加载失败!</div><!-- 加载外部脚本 --><script>function loadScript(url, callback) {var script = document.createElement('script');script.src = url;script.onerror = function() {// 脚本加载失败时显示错误提示var loadError = document.getElementById('load-error');loadError.style.display = 'block';if (callback && typeof callback === 'function') {callback(false); // 传递加载失败的信息给回调函数(可选)}};script.onload = function() {// 脚本加载成功时不执行任何操作(或者可以隐藏一个加载中的提示,如果有的话)if (callback && typeof callback === 'function') {callback(true); // 传递加载成功的信息给回调函数(可选)}};document.head.appendChild(script);}// 调用函数加载脚本loadScript('https://cdn.wwads.cn/js/makemoney.js');</script><!-- 页面其余内容 --><h1>欢迎来到我的网站</h1><p>这里是一些内容...</p>
</body>
</html>

解决

验证成功。但是这毕竟是别人系统的js资源,乱引入加载肯定不行。

含有ads域名的资源确实会被拦截,刚好我们有现成的ads.xxx.com域名资源。本地系统在初始化时通过判断ads.xxx.com/xxx/js 资源是否加载成功了来判断当前浏览器是否启用了检测AdBlock/AdBlock Plus开启状态。

大家如果还有啥其他有效的方法,欢迎补充...。后续继续更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/881477.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Whole Web] 前端项目规范 -- 4. Git提交信息规范(Commitlint + commitizen + cz-git)

前面讲的都是在git提交之前的一些流程检查,而当我们git提交的时候,提交信息,也应该是需要规范的 commitlint 在使用Git提交代码时,通常都需要填写提交说明,也就是Commit Message git commit -m 提交测试说白了,Commit Message就是我们提交的时候,在-m后面写的提交说明,…

lua包管理器luarocks使用

下载lua 1) 这边用lua 5.1.5 exe文件LuaBinaries - Browse /5.1.5/Tools Executables at SourceForge.net,下载lua-5.1.5_Win64_dll15_lib.zip文件名解释:dll15表示vs2017的编译器,dllg4表示cygwin gcc4.x的编译器, dllw4表示4表示MingW gcc4的编译器 头文件,dll文件LuaBin…

新突破!上海交大重磅新作LIMO:挑战RL Scaling范式

前言 在追求人工智能极限的道路上,"更大即更强" 似乎已成为共识。特别是在数学推理这一被视为 AI 终极挑战的领域,业界普遍认为需要海量数据和复杂的强化学习才能获得突破。然而,来自上海交通大学的最新研究却给出了一个令人震惊的答案:仅需 817 条精心设计的样本…

Paragon ExtFS for Windows – Windows 系统读取 Linux 分区文件软件

Paragon ExtFS for Windows是一款可以让用户在Windows系统下访问和查看Linux分区下文件的工具,支持Ext2/Ext3/Ext4分区,并且支持查看媒体文件和文件导入导出,是一款非常不错的跨平台系统访问工具。 Paragon ExtFS for Windows 是一款可以让用户在 Windows 系统下访问和查看 …

[Whole Web] 前端项目规范 -- 3. Git工作流规范(Husky + Lint-staged)

Git 流程规范配置 在前端项目开发中,规范git提交信息,也是经常使用的手段,如何确保团队成员都遵循ESint规则,且不会将不符合规范的代码推送到Git仓库? 答案是:使用带有git hooks功能的husky。git hooks是git内置的功能,它会在执行Git命令之前(或之后)进行一些其它操作…

《DeepSeek从入门到精通》PDF免费下载

全网疯传的DeepSeek使用教程,DeepSeek:从入门到精通(104页面,资料比较全)(清华大学元宇宙文化实验室出的)全网疯传的DeepSeek使用教程 点击查看原文下载内容简介 DeepSeek:从入门到精通(104页面,资料比较全)(清华大学元宇宙文化实验室出的) 文章中提到了微博、小红书、抖…

【洛谷P3884】二叉树问题[JLOI2009]

这个主要是二叉树的大杂烩 [JLOI2009] 二叉树问题 题目描述 如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:深度:\(4\) 宽度:\(4\) 结点 8 和 6 之间的距离:\(8\) 结点 7 和 6 之间的距离:\(3\)其中宽度表示二叉树上同一层最多的结点个数,节点 \(u, v\) 之间的距…

[Whole Web] 前端项目规范 - 1. 项目风格统一

项目风格统一 在前端项目中存在.vscode文件夹,文件夹下一般存在两个文件extensions.json和setting.json。作用是保持所有开发者安装了相同的插件和相同的配置,保持开发环境一致性。extensions.json 在当前项目中,需要安装哪些插件。 {"recommendations": ["V…

告别熬夜写代码!VSCode+Cline扩展插件+DeepSeek-V3大模型,让你的编程水平瞬间超越99.9%的人

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注什么是DeepSeek-V3 DeepSeek是杭州深度求索公司发布的一系列在知识类任务上表现出色的人工智能模型! …

RocketMQ实战—8.营销系统业务和方案介绍

大纲 1.电商核心交易场景的业务流程 2.电商支付后履约场景的业务流程 3.电商营销场景的业务说明 4.电商促销活动的Push推送 5.会员与推送的数据库表结构 6.营销系统的数据库表结构 7.营销系统的基础技术架构 8.XXLJob分布式调度运行原理 9.电商营销系统的工程结构 10.电商营销系…

fluid主题优化

根目录是 C:\blog, 主题目录是 C:\blog\node_modules\hexo-theme-fluid固定背景和设置透明度在根目录下新建一个 scripts 目录,里面添加一个 bg.js 的文件 const {root: siteRoot = "/"} = hexo.config; hexo.extend.injector.register("body_begin", `&l…

Arch、Hyprland实体机全安装教程

安装 内容参考 Arch WiKi Arch 提供了自动化安装脚本可以输入 archinstall 进行配置 下载 Arch 镜像 Arch 2024.12.01 镜像 验证 ISO 文件密钥 SHA256 certutil -hashfile 镜像文件. iso SHA256 # 和官网密钥对比Arch 官网下载界面 密钥在这查看 制作启动盘 进入 Rufus 官网 下…