在运营个人博客时,很多站长会通过 Google AdSense 等广告平台获取一些收入。然而,越来越多的用户会在浏览器中安装广告拦截插件(如 Adblock、uBlock Origin 等),这会导致广告无法正常展示,影响站长的收益。本文将介绍如何在 Hexo 博客(以 Matery 主题为例)中检测用户是否启用了广告拦截插件,并在检测到后禁止其访问博客内容。
常见的广告拦截检测方式有两种:
我们选择第二种方式,使用 FuckAdBlock 库,结合自定义 JS 实现检测和拦截。
在博客主题的 <head>
区域引入 FuckAdBlock:
<script async src="https://cdnjs.cloudflare.com/ajax/libs/fuckadblock/3.2.1/fuckadblock.min.js"></script>
在 themes/matery/source/js/adblock-detector.js
新建如下内容:
function blockContent() {
document.documentElement.innerHTML = '<div style="display:flex;align-items:center;justify-content:center;height:100vh;font-size:2rem;color:#d32f2f;background:#fff;flex-direction:column;"><span>检测到您使用了广告拦截插件 </span><br><span>请关闭广告拦截后访问本站 </span></div>';
}
window.addEventListener('load', function() {
// 等待 fuckAdBlock 加载
function waitFAB() {
if (typeof fuckAdBlock !== 'undefined') {
fuckAdBlock.onDetected(blockContent);
fuckAdBlock.onNotDetected(function(){});
fuckAdBlock.check();
} else {
setTimeout(waitFAB, 50);
}
}
waitFAB();
});
在 themes/matery/layout/_partial/head.ejs
的 <head>
区域添加:
<script src="<%- theme.jsDelivr.url %><%- url_for('js/adblock-detector.js') %>"></script>
确保在 FuckAdBlock 库之后引入。
当用户启用广告拦截插件访问博客时,会看到如下提示,并无法浏览博客内容:
检测到您使用了广告拦截插件 请关闭广告拦截后访问本站
通过引入 FuckAdBlock 检测库并结合自定义 JS,我们可以有效检测并拦截使用广告拦截插件的用户,保护自己的广告收益。该方案兼容性好,易于集成,适合所有 Hexo 博客用户参考。