如何在我的网站上检测Adblock?

时间:2011-02-01 23:25:16

标签: adsense adblock

我希望能够在用户访问我的网站时检测用户是否正在使用广告拦截软件。如果他们正在使用它,我想显示一条消息,要求他们关闭它以支持项目,如this website

如果您进入该网站并且您的浏览器启用了某种广告拦截软件,则该网站会显示一个小横幅,告诉用户广告收入用于托管项目,他们应该考虑关闭Adblock。

我想在我的网站上这样做,我正在使用adsense广告,我该怎么做?

46 个答案:

答案 0 :(得分:379)

我的解决方案并非特定于某个广告网络,而且非常轻量级。我已经在生产中运行了几年。 AdBlock会阻止包含“广告”一词的所有网址。所以这就是我所做的:

我在我的webroot中添加了一个名为ads.js

的小js文件

这是该文件中唯一的代码行

var canRunAds = true;

然后在我页面的某个地方:

<html>
  <head>
    <script src="/js/ads.js"></script>
  </head>
  <body>
    <script>
      if( window.canRunAds === undefined ){
        // adblocker detected, show fallback
        showFallbackImage();
      }
    </script>
  </body>
</html>

像ads.js这样的文件至少被Chrome上的这些广告拦截器阻止了:

  • 的AdBlock
  • Adblock Plus
  • Adblock Pro
  • Ghostery的

2019-02-15更新:

在上面的列表中添加了Ghostery,因为扩展程序现在也阻止了对ads.js的请求。非常便利。这是否意味着Ghostery实际上是在帮助我们开发人员通过扩展来检测广告屏蔽?

不适用于:

隐私獾

答案 1 :(得分:140)

不是直接的答案,但我会将广告背后的信息加载...而不是尝试检测它,它只会在广告没有显示时显示。

答案 2 :(得分:102)

http://thepcspy.com/read/how_to_block_adblock/

使用jQuery:

function blockAdblockUser() {
    if ($('.myTestAd').height() == 0) {
        window.location = 'http://example.com/AdblockNotice.html';
    }
}

$(document).ready(function(){
    blockAdblockUser();
});

当然,您需要拥有AdblockNotice.html的目标网页,而.myTestAd类需要反映您的实际广告容器。但这应该有用。

修改

正如TD_Nijboer建议的那样,更好的方法是使用:hidden(或:visible,我在下面使用)选择器,以便同时检查display: none

function blockAdblockUser() {
    if ($('.myTestAd').filter(':visible').length == 0) {
        // All are hidden, or "not visible", so:
        // Redirect, show dialog, do something...
    } else if ($('.myTestAd').filter(':hidden').length > 0) {
        // Maybe a different error if only some are hidden?
        // Redirect, show dialog, do something...
    }
}

当然,如果需要,这两个都可以组合成一个if块。

请注意,visibility: hidden也不会被捕获(布局空间停留,但广告不可见)。要检查,可以使用另一个过滤器:

$('.myTestAd').filter(function fi(){
    return $(this).css('visibility') == 'hidden';
})

这将为您提供一系列“不可见”的广告元素(理论上,任何大于0都是一个问题。)

答案 3 :(得分:38)

大多数广告都是在javascript中动态加载的。我刚刚使用onerror事件来检测是否可以加载广告脚本。似乎工作。

使用GoogleAds的示例:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" onerror="adBlockFunction();"></script>

这也可以用于其他元素,以查看广告拦截器是否阻止内容。如果远程元素不存在或无法到达,此方法可能会产生误报。

答案 4 :(得分:19)

要检测用户是否阻止了广告,您只需在广告javascript中找到一个功能并尝试对其进行测试即可。他们用什么方法阻止广告并不重要。以下是Google Adsense广告的效果:

if(!window.hasOwnProperty('google_render_ad') || window.google_render_ad === undefined) { 
    //They're blocking ads, display your banner
}

此处概述了此方法:http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam

答案 5 :(得分:14)

我用jquery最简单的解决方案是:

$.ajax({
    url: "/scripts/advertisement.js", // this is just an empty js file
    dataType: "script"
}).fail(function () {
    // redirect or display message here
});

advert.js只包含任何内容。当某人使用adblock时,它会失败并调用该函数。

答案 6 :(得分:11)

我的建议是:不要这样做!

任何将人视为“违法者”的情况都会导致他们反击。

这是我的建议。

在页面顶部放置一条不显眼的小消息(无论广告是否被屏蔽),文字为I *totally* respect your right to block ads,另一个页面/弹出窗口标题为Read more ...

在另一页上,明确表示您了解它是他们的计算机,他们可以自由使用广告拦截。

同样明确以非指责的方式使用这些拦截器会让您更难以提供精彩的内容(详细解释原因),而且您希望广告阻止不会发生在您的网站上,这完全是他们的决定。专注于关闭阻止的积极因素。

那些强烈反对广告的人会忽视这一点,但无论如何你都没有机会说服他们。那些漠不关心的人很可能会被你的吸引力所左右,因为你不是在做“让我走自己的路,或者我会把球带回家”,这应该是五岁儿童的专属领域。

记住,没有人拿着枪对着你的头,迫使你把你的东西放在网上。尊重你的读者/用户,你可能会发现很多人会回报。

答案 7 :(得分:11)

我知道已经有足够的答案了,但是自从谷歌搜索到这个主题的“检测广告块”问题以来,我想提供一些见解,以防你不使用adsense

具体来说,通过此示例,您可以检测是否使用了Firefox Adblock提供的默认Adblock列表。它利用了这个阻止列表中有一个被CSS id #bottomAd阻止的元素。如果我在页面中包含这样的元素并测试它的高度,我知道adblocking是否有效:

<!-- some code before -->
<div id="bottomAd" style="font-size: 2px;">&nbsp;</div>
<!-- some code after -->

其余的是通过通常的jQuery嫌疑人完成的:

$(document).ready( function() {
  window.setTimeout( function() {
    var bottomad = $('#bottomAd');
    if (bottomad.length == 1) {
      if (bottomad.height() == 0) {
        // adblocker active
      } else {
        // no adblocker
      }
    }      
  }, 1);
}

可以看出,我使用的setTimeout至少有1ms的超时时间。我在各种浏览器上测试了这个,大多数时候,直接检查ready中的元素总是返回0;无论广告拦截器是否有效。我对此有两个想法:渲染尚未完成或Adblock尚未启动。我没有打算进一步调查。

答案 8 :(得分:9)

他们正在利用Google的广告代码创建一个ID为“iframe”的iframe这一事实。因此,只要您的页面上没有包含该ID的内容,这也适用于您。

<p id="ads">
<script type="text/javascript"><!--
google_ad_client = "their-ad-code-here";
/* 160x600, droite */
google_ad_slot = "their-ad-code-here";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

</p>

<script type="text/javascript"><!--
if(document.getElementsByTagName("iframe").item(0) == null)
{
    document.write("<div style='width:160px; height:600px; padding-top: 280px; margin-left:5px;border:1px solid #000000; text-align:center; font-family:century gothic, arial, helvetica, sans serif;padding-left:5px;padding-right:5px;'>Advertising seems to be blocked by your browser.<br /><br /><span style='font-size:10px'>Please notice that advertising helps us to host the project.<br /><br />If you find these ads intrusive or inappropriate, please contact me.</span><img src='http://www.playonlinux.com/images/abp.jpg' alt='Adblock Plus' /></div>");
}
--></script>

答案 9 :(得分:9)

我注意到之前的评论使用google adsense作为测试对象。有些页面不使用adsense,使用adsense块作为测试并不是一个好主意。因为adsense块可能会损害您的SEO。 以下是我通过adblocker简单阻止类检测的示例:

HTML:

<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>

Jquery的:

$(document).ready(function()
{
   if(!$("#ablockercheck").is(":visible"))
   {
     $("#ablockermsg").text("Please disable adblocker.").show();
   }
});

&#34; ablockercheck&#34;是adblocker阻止的ID。因此,检查它是否可见,您可以检测adblocker是否已打开。

答案 10 :(得分:7)

只需在您的网站上添加小脚本:

var isAdsDisplayed = true;

名称为 adsbygoogle.js

然后执行以下操作:

<script src="/js/adsbygoogle.js"></script>
<script>
if(window.isAdsDisplayed === undefined ) {
  // AdBlock is enabled. Show message or track custom data here
}
</script>

找到此解决方案here

答案 11 :(得分:7)

您不需要额外的HTTP请求,您可以简单地计算假添加的高度。

顺便说一句,这里有一个full list与广告拦截器避免渲染的元素相匹配。

window.adBlockRunning = function() {
    return (getComputedStyle(document.getElementById("detect"))["display"] == "none") ? true : false;
  }()

console.log(window.adBlockRunning);
#detect {
  height: 1px;
  width: 1px;
  position: absolute;
  left: -999em;
  top: -999em
}
<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads"></div>

答案 12 :(得分:7)

我在我的网站上使用这种方法,也许你会觉得它很有帮助。在我看来,这是最简单的解决方案。

AdBlocker会阻止特定的类和html元素,通过检查开发者控制台中任何被屏蔽的广告的这些选择器(它们都已列出),您可以看到哪些元素将始终被阻止。

E.g。只需在stackoverflow上查看此问题页面,您就会看到一堆被屏蔽的广告。

例如,任何bottom-ad类的元素都会被自动阻止。

  1. 我创建了一个带有bottom-ad类的非空div元素: <div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
  2. 页面加载后,只检查此元素是否隐藏。我使用jQuery,但随意使用javascript: 使用$('.bottom-ad').css('display') == "none"
  3. $('.bottom-ad').is(':visible')甚至更好

    如果值为true,则AdBlocker处于活动状态。

答案 13 :(得分:7)

AdBlock似乎阻止加载AdSense(等)JavaScript文件。因此,如果您使用的是异步版AdSense广告,则可以检查adsbygoogle是否为Array。由于异步脚本是异步的,因此必须在几秒钟后检查。这是一个粗略轮廓

window.setTimeout(function(){
    if(adsbygoogle instanceof Array) {
        // adsbygoogle.js did not execute; probably blocked by an ad blocker
    } else {
        // adsbygoogle.js executed
    }
}, 2000);

为了澄清,以下是AdSense异步广告代码的示例:

<!-- this can go anywhere -->
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<!-- this is where the ads display -->
<ins class="adsbygoogle" ...></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

请注意adsbygoogle初始化为数组。 adsbygoogle.js库在执行时将此数组更改为Object {push: ...}。在一段时间后检查变量的类型可以告诉您脚本是否已加载。

答案 14 :(得分:6)

安全的方法是将广告包装在<div>内并检查高度

<div id="check-ab">
/* your ads code */
</div>

setTimeout(function(){
  if(document.getElementById("check-ab").offsetHeight === 0){
    console.log("ads blocked");
  }
  else{
    console.log("ads running");
  }
}, 100);

适用于adblock plus和bluehell防火墙。

答案 15 :(得分:4)

如果使用新的AdSense代码,您可以轻松检查内容或css检查。

在标记中正常放置广告:

<ins class="adsbygoogle" style="display: block;"
   data-ad-client="ca-pub-######"
   data-ad-slot="#######"
   data-ad-format="auto"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

然后您在页面的底部处调用adsense代码(注意不要在调用"async"脚本时使用adsbygoogle.js标志):

<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

然后在下面添加以下代码:

<script>
if (!adsbygoogle.loaded) {
   // do something to alert the user
}
</script>

AdSense会在广告加载时始终创建/设置标记adsbygoogle.loadedtrue。您可以将支票放入setTimeout功能,以便将检查延迟几秒钟。

答案 16 :(得分:4)

检查是否存在广告拦截的有效方法: 只需尝试触发google广告的网址,检查是否启用了adblock。如果是,则运行callback_has_adblock,否则运行callback_no_adblock。此解决方案需要更多的请求,但至少它可以工作:

var hasAdBlock = function (callback_has_adblock, callback_no_adblock) {

    $.getScript( "http://pagead2.googlesyndication.com/pagead/show_ads.js" )
        .done(function( script, textStatus ) {
            callback_no_adblock();
        })
        .fail(function( jqxhr, settings, exception ) {
            callback_has_adblock();
    });
};

此解决方案适用于所有类型的广告,而不仅仅是google adsense。

答案 17 :(得分:3)

尽管这个问题已经存在,但我最近发现它非常有用,因此只能假设还有其他人仍然在观看它。在查看此处和其他地方之后,我推测主要的三个客户端检查间接检测广告拦截器是检查阻止div / img,阻止iframe和阻止资源(javascript文件) )。

也许它超过顶部或偏执,但它涵盖了广告拦截系统,只能阻止选择中的一两个,因此如果您只进行了一次检查,则可能没有被覆盖。

在页面上运行检查添加:(我正在使用jQuery)

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="advertisement.js"></script>
<script type="text/javascript" src="abds.js"></script>

并在页面上的其他位置添加以下内容:

<div id="myTestAd"><img src="http://placehold.it/300x250/000000/ffffff.png&text=Advert" /></div>

我使用了带有诱饵名称的div以及带有文字“广告”的外部托管图像以及AdSense使用的尺寸(感谢placehold.it!)。

advertisement.js中,您应该在文档中附加一些内容,我们可以稍后查看。虽然看起来你和以前一样,但实际上你正在检查文件(advertisement.js)本身是否被加载,而不是输出。

$(document).ready(
{

    $("body").append("<div id=\"myTestAd2\">check</div>");

});

然后是广告拦截器检测脚本,它结合了所有内容

$(document).ready(function()
{
    var ifr = '<iframe id="adServer" src="http://ads.google.com/adserver/adlogger_tracker.php" width="300" height="300"></iframe>';
    $("body").append(ifr);
});

$(window).on("load",function()
{

    var atb = $("#myTestAd");
    var atb2= $("#myTestAd2");
    var ifr = $("#adServer");

    setTimeout(function()
    {

        if( (atb.height()==0) ||
            (atb.filter(":visible").length==0) ||
            (atb.filter(":hidden").length>0) ||
            (atb.is("hidden")) ||
            (atb.css("visibility")=="hidden") ||
            (atb.css("display")=="none") ||
            (atb2.html()!="check") ||
            (ifr.height()!=300) ||
            (ifr.width()!=300) )
        {
            alert("You're using ad blocker you normal person, you!");
        }

    },500);

});

当文档准备好时,即加载了标记,我们也将iframe添加到文档中。然后,当窗口加载时,即内容包括加载图片等,我们检查:

  • 第一个测试版的尺寸和可见性。
  • 第二个测试版的内容是“检查”,就像advertimsent.js 阻止一样。
  • iframe的维度(我猜可见性,隐藏对象没有高度或宽度?)

风格:

div#myTestAd, iframe#adServer
{
    display: block;
    position: absolute;
    left: -9999px;
    top: -9999px;
}

div#myTestAd2
{
    display: none;
}

希望这有帮助

答案 18 :(得分:3)

这个效果不错

如果有广告拦截器,它会提醒您

checkAdBlocker();

function checkAdBlocker() {
    try {
        fetch(
            new Request("https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js", {
                method: 'HEAD',
                mode: 'no-cors'
            })).catch(error => {
            showNotification()
        });
    } catch (e) {
        // Request failed, likely due to ad blocker
        showNotification()
    }
}

function showNotification() {
    alert("Please disable adBlocker")
}

答案 19 :(得分:2)

大多数adblocker取消对ads.js的HTTP请求,并为该元素创建0px,但是有时adblocker 删除了DOM ,并且上述某些回答将失败,因为不检查是否存在元件。

使用setTimeout()是一个好习惯,因为没有它,将使脚本与adblocker竞争。

下面的脚本将检查dom是否存在/已删除,并检查元素的offsetHeight是否存在。

setTimeout(function() {
  var a = document.querySelector('.showads'),
    b = a ? (a.offsetHeight ? false : true) : true;
  console.log('ads blocked?', b)
}, 200); // don't too fast or will make the result wrong.
<div class="ads showads">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</div>

答案 20 :(得分:2)

async function hasAdBlock() {
  try {
    await fetch("https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js", {
      method: "HEAD",
      mode: "no-cors",
    })
    return false;
  } catch(e) {
    return true;
  }
}

答案 21 :(得分:2)

ads.js

var e=document.createElement('div');e.id='GjyTonmtkfKD';e.style.display='none';document.body.appendChild(e);

html文件

<div id="GPlTKAacLIdW">Our website is made possible by displaying online advertisements to our visitors.<br>Please consider supporting us by disabling your ad blocker.</div><script src="/ads.js" type="text/javascript"></script><script type="text/javascript">if(!document.getElementById('GjyTonmtkfKD')){ document.getElementById('GPlTKAacLIdW').style.display='block'; }</script>

这也显示在 enter image description here

答案 22 :(得分:2)

无需超时和DOM嗅探。只需尝试从流行的广告网络加载脚本,并查看广告拦截器是否拦截了HTTP请求。

/**
 * Attempt to load a script from a popular ad network. Ad blockers will intercept the HTTP request.
 *
 * @param {string} url
 * @param {Function} cb
 */
function detectAdBlockerAsync(url, cb){
    var script = document.createElement('script');

    script.onerror = function(){
        script.onerror = null;
        document.body.removeChild(script);
        cb();
    }

    script.src = url;
    document.body.appendChild(script);
}

detectAdBlockerAsync('http://ads.pubmatic.com/AdServer/js/gshowad.js', function(){
    document.body.style.background = '#c00';
});

答案 23 :(得分:2)

刚刚创建了我自己的“插件”来解决这个问题,并且效果非常好:

adBuddy + jsBuddy:

ADBuddy JSBuddy GitHub

我添加了移动兼容性和jsBlocking检测功能......(就像显示给用户的覆盖图,要求他们禁用 adBlocking / jsBlocking 软件);也使其响应友好。

它在Coffeeware License下开源。

答案 24 :(得分:2)

我知道这已经回答了,但我查看了建议的示例网站,我看到他们这样做:

<script type="text/javascript">
if(document.getElementsByTagName("iframe").item(0) == null) {
    document.write("<div style="width: 160px; height: 600px; padding-top: 280px; margin-left: 5px; border: 1px solid #666666; color: #FFF; background-color: #666; text-align:center; font-family: Maven Pro, century gothic, arial, helvetica, sans-serif; padding-left: 5px; padding-right: 5px; border-radius: 7px; font-size: 18px;">Advertising seems to be blocked by your browser.<br><br><span style="font-size: 12px;">Please notice that advertising helps us to host the project.<br><br>If you find these ads intrusive or inappropriate, please contact me.</span><br><img src="http://www.playonlinux.com/images/abp.png" alt="Adblock Plus"></div>");
};
</script>

答案 25 :(得分:1)

timing's回答很好,但没有更多工作,所以我已将js文件的名称更新为&#39; adsense&#39;来自&#39; ads&#39;它像魅力一样回归!

这是代码,也许这会帮助某人:

<html>
      <head>
            <script src="/adsense.js"></script>
      </head>
             <body>
                   <script>
                           if( window.adblockDetecter === undefined ){
                           // Do anithing, adblocker detected!
                           alert('Adblocker Detected!');}
                   </script>
            </body>
</html>

在Js文件中只放了这一行:var adblockDetecter = true;

答案 26 :(得分:1)

以上所有答案均有效,但是大多数答案不适用于DNS级广告拦截。

DNS级广告拦截器(如pi-hole)基本上返回NXDOMAIN(域不存在)以获取广告阻止域的列表(例如,telemetry.microsoft.com将“不存在”)。

有几种方法可以避免此问题:

方法A :通过ip地址而非域请求广告。

此方法有点烦人,因为您必须跟踪ip地址。如果您的代码没有得到很好的维护或定期更新,这将是一个问题。

方法B :即使客户端报告NXDOMAIN,也阻止所有失败的请求。

如果它是“合法的” NXDOMAIN,这对于用户来说将非常烦人。

答案 27 :(得分:1)

使用adblock on运行此功能,然后在页面上的</body>标记结束前将其粘贴到页脚中。

&#13;
&#13;
<script type="text/javascript"  charset="utf-8">
// Place this code snippet near the footer of your page before the close of the /body tag
// 
                            
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';q O=\'\',29=\'1W\';1S(q i=0;i<12;i++)O+=29.X(B.N(B.K()*29.F));q 2z=1,2u=4p,2v=4o,2x=4n,33=C(e){q i=!1,o=C(){z(k.1g){k.2T(\'2J\',t);D.2T(\'1V\',t)}S{k.2V(\'2L\',t);D.2V(\'27\',t)}},t=C(){z(!i&&(k.1g||4m.2E===\'1V\'||k.2O===\'2K\')){i=!0;o();e()}};z(k.2O===\'2K\'){e()}S z(k.1g){k.1g(\'2J\',t);D.1g(\'1V\',t)}S{k.2M(\'2L\',t);D.2M(\'27\',t);q n=!1;2P{n=D.4k==4j&&k.23}2U(r){};z(n&&n.2Q){(C a(){z(i)G;2P{n.2Q(\'17\')}2U(t){G 4i(a,50)};i=!0;o();e()})()}}};D[\'\'+O+\'\']=(C(){q e={e$:\'1W+/=\',4h:C(t){q a=\'\',d,n,i,c,s,l,o,r=0;t=e.t$(t);1a(r<t.F){d=t.14(r++);n=t.14(r++);i=t.14(r++);c=d>>2;s=(d&3)<<4|n>>4;l=(n&15)<<2|i>>6;o=i&63;z(2Z(n)){l=o=64}S z(2Z(i)){o=64};a=a+U.e$.X(c)+U.e$.X(s)+U.e$.X(l)+U.e$.X(o)};G a},11:C(t){q n=\'\',d,l,c,s,r,o,a,i=0;t=t.1C(/[^A-4g-4f-9\\+\\/\\=]/g,\'\');1a(i<t.F){s=U.e$.1I(t.X(i++));r=U.e$.1I(t.X(i++));o=U.e$.1I(t.X(i++));a=U.e$.1I(t.X(i++));d=s<<2|r>>4;l=(r&15)<<4|o>>2;c=(o&3)<<6|a;n=n+P.T(d);z(o!=64){n=n+P.T(l)};z(a!=64){n=n+P.T(c)}};n=e.n$(n);G n},t$:C(e){e=e.1C(/;/g,\';\');q n=\'\';1S(q i=0;i<e.F;i++){q t=e.14(i);z(t<1s){n+=P.T(t)}S z(t>4e&&t<4d){n+=P.T(t>>6|4c);n+=P.T(t&63|1s)}S{n+=P.T(t>>12|2F);n+=P.T(t>>6&63|1s);n+=P.T(t&63|1s)}};G n},n$:C(e){q i=\'\',t=0,n=4a=1u=0;1a(t<e.F){n=e.14(t);z(n<1s){i+=P.T(n);t++}S z(n>3V&&n<2F){1u=e.14(t+1);i+=P.T((n&31)<<6|1u&63);t+=2}S{1u=e.14(t+1);2f=e.14(t+2);i+=P.T((n&15)<<12|(1u&63)<<6|2f&63);t+=3}};G i}};q a=[\'49==\',\'48\',\'47=\',\'46\',\'45\',\'44=\',\'43=\',\'42=\',\'41\',\'40\',\'3Z=\',\'3Y=\',\'3X\',\'3W\',\'4q=\',\'4b\',\'4r=\',\'4J=\',\'4L=\',\'4M=\',\'4N=\',\'4O=\',\'4P==\',\'4Q==\',\'4K==\',\'4R==\',\'4T=\',\'4U\',\'4V\',\'4W\',\'4X\',\'4Y\',\'4S\',\'4I==\',\'4t=\',\'3T=\',\'4G=\',\'4F==\',\'4E=\',\'4D\',\'4C=\',\'4B=\',\'4A==\',\'4z=\',\'4y==\',\'4x==\',\'4w=\',\'4v=\',\'4u\',\'4s==\',\'3U==\',\'3A\',\'3S==\',\'3k=\'],y=B.N(B.K()*a.F),w=e.11(a[y]),Y=w,Q=1,v=\'#3m\',r=\'#3n\',W=\'#3g\',g=\'#3j\',Z=\'\',b=\'3h!\',p=\'3e 3f 3d 3c\\\'3a 39 38 2n 2m. 3o\\\'s 3l.  3q 3F\\\'t?\',f=\'3R 3Q 3P-3O, 3N 3L\\\'t 3K 3J U 3I 3E.\',s=\'I 3r, I 3D 3C 3B 2n 2m.  3x 3w 3v!\',i=0,u=0,n=\'3u.3t\',l=0,L=t()+\'.2k\';C h(e){z(e)e=e.1R(e.F-15);q i=k.2C(\'3M\');1S(q n=i.F;n--;){q t=P(i[n].1H);z(t)t=t.1R(t.F-15);z(t===e)G!0};G!1};C m(e){z(e)e=e.1R(e.F-15);q t=k.3s;x=0;1a(x<t.F){1n=t[x].1P;z(1n)1n=1n.1R(1n.F-15);z(1n===e)G!0;x++};G!1};C t(e){q n=\'\',i=\'1W\';e=e||30;1S(q t=0;t<e;t++)n+=i.X(B.N(B.K()*i.F));G n};C o(i){q o=[\'3z\',\'3G==\',\'3H\',\'3p\',\'2W\',\'3i==\',\'3b=\',\'37==\',\'4Z=\',\'4H==\',\'52==\',\'5i==\',\'6z\',\'6u\',\'6r\',\'2W\'],r=[\'35=\',\'6B==\',\'6t==\',\'6x==\',\'6d=\',\'6n\',\'62=\',\'6c=\',\'35=\',\'51\',\'6g==\',\'6k\',\'6l==\',\'61==\',\'5X==\',\'6m=\'];x=0;1O=[];1a(x<i){c=o[B.N(B.K()*o.F)];d=r[B.N(B.K()*r.F)];c=e.11(c);d=e.11(d);q a=B.N(B.K()*2)+1;z(a==1){n=\'//\'+c+\'/\'+d}S{n=\'//\'+c+\'/\'+t(B.N(B.K()*20)+4)+\'.2k\'};1O[x]=26 1T();1O[x].1X=C(){q e=1;1a(e<7){e++}};1O[x].1H=n;x++}};C M(e){};G{2X:C(e,r){z(6j k.J==\'6i\'){G};q i=\'0.1\',r=Y,t=k.1d(\'1y\');t.1k=r;t.j.1h=\'1D\';t.j.17=\'-1o\';t.j.V=\'-1o\';t.j.1t=\'2b\';t.j.13=\'6h\';q d=k.J.2p,a=B.N(d.F/2);z(a>15){q n=k.1d(\'2d\');n.j.1h=\'1D\';n.j.1t=\'1r\';n.j.13=\'1r\';n.j.V=\'-1o\';n.j.17=\'-1o\';k.J.5Y(n,k.J.2p[a]);n.1f(t);q o=k.1d(\'1y\');o.1k=\'2h\';o.j.1h=\'1D\';o.j.17=\'-1o\';o.j.V=\'-1o\';k.J.1f(o)}S{t.1k=\'2h\';k.J.1f(t)};l=6b(C(){z(t){e((t.1Y==0),i);e((t.21==0),i);e((t.1K==\'2H\'),i);e((t.1Q==\'2g\'),i);e((t.1J==0),i)}S{e(!0,i)}},28)},1G:C(t,c){z((t)&&(i==0)){i=1;D[\'\'+O+\'\'].1z();D[\'\'+O+\'\'].1G=C(){G}}S{q f=e.11(\'6a\'),u=k.69(f);z((u)&&(i==0)){z((2u%3)==0){q l=\'68=\';l=e.11(l);z(h(l)){z(u.1F.1C(/\\s/g,\'\').F==0){i=1;D[\'\'+O+\'\'].1z()}}}};q y=!1;z(i==0){z((2v%3)==0){z(!D[\'\'+O+\'\'].2y){q d=[\'67==\',\'66==\',\'6o=\',\'5Z=\',\'6p=\'],m=d.F,r=d[B.N(B.K()*m)],a=r;1a(r==a){a=d[B.N(B.K()*m)]};r=e.11(r);a=e.11(a);o(B.N(B.K()*2)+1);q n=26 1T(),s=26 1T();n.1X=C(){o(B.N(B.K()*2)+1);s.1H=a;o(B.N(B.K()*2)+1)};s.1X=C(){i=1;o(B.N(B.K()*3)+1);D[\'\'+O+\'\'].1z()};n.1H=r;z((2x%3)==0){n.27=C(){z((n.13<8)&&(n.13>0)){D[\'\'+O+\'\'].1z()}}};o(B.N(B.K()*3)+1);D[\'\'+O+\'\'].2y=!0};D[\'\'+O+\'\'].1G=C(){G}}}}},1z:C(){z(u==1){q E=2A.6s(\'2B\');z(E>0){G!0}S{2A.6y(\'2B\',(B.K()+1)*28)}};q h=\'6f==\';h=e.11(h);z(!m(h)){q c=k.1d(\'5u\');c.1Z(\'5V\',\'5r\');c.1Z(\'2E\',\'1m/5q\');c.1Z(\'1P\',h);k.2C(\'5o\')[0].1f(c)};5n(l);k.J.1F=\'\';k.J.j.16+=\'R:1r !19\';k.J.j.16+=\'1B:1r !19\';q L=k.23.21||D.36||k.J.21,y=D.5m||k.J.1Y||k.23.1Y,a=k.1d(\'1y\'),Q=t();a.1k=Q;a.j.1h=\'2r\';a.j.17=\'0\';a.j.V=\'0\';a.j.13=L+\'1x\';a.j.1t=y+\'1x\';a.j.2G=v;a.j.24=\'5l\';k.J.1f(a);q d=\'<a 1P="5k://5j.5W" j="H-1e:10.5h;H-1j:1i-1l;1c:5f;">1U 53 5e</a>\';d=d.1C(\'5d\',t());d=d.1C(\'5c\',t());q o=k.1d(\'1y\');o.1F=d;o.j.1h=\'1D\';o.j.1A=\'1L\';o.j.17=\'1L\';o.j.13=\'5b\';o.j.1t=\'5a\';o.j.24=\'2l\';o.j.1J=\'.6\';o.j.2e=\'2j\';o.1g(\'59\',C(){n=n.58(\'\').57().56(\'\');D.2D.1P=\'//\'+n});k.1E(Q).1f(o);q i=k.1d(\'1y\'),M=t();i.1k=M;i.j.1h=\'2r\';i.j.V=y/7+\'1x\';i.j.5s=L-5g+\'1x\';i.j.5t=y/3.5+\'1x\';i.j.2G=\'#5I\';i.j.24=\'2l\';i.j.16+=\'H-1j: "5U 5T", 1v, 1w, 1i-1l !19\';i.j.16+=\'5S-1t: 5R !19\';i.j.16+=\'H-1e: 5Q !19\';i.j.16+=\'1m-1p: 1q !19\';i.j.16+=\'1B: 5P !19\';i.j.1K+=\'1U\';i.j.2I=\'1L\';i.j.5O=\'1L\';i.j.5N=\'2q\';k.J.1f(i);i.j.5L=\'1r 5K 5J -5H 5v(0,0,0,0.3)\';i.j.1Q=\'32\';q Y=30,w=22,x=18,Z=18;z((D.36<34)||(5G.13<34)){i.j.2S=\'50%\';i.j.16+=\'H-1e: 5E !19\';i.j.2I=\'5C;\';o.j.2S=\'65%\';q Y=22,w=18,x=12,Z=12};i.1F=\'<2N j="1c:#5B;H-1e:\'+Y+\'1M;1c:\'+r+\';H-1j:1v, 1w, 1i-1l;H-1N:5A;R-V:1b;R-1A:1b;1m-1p:1q;">\'+b+\'</2N><2R j="H-1e:\'+w+\'1M;H-1N:5z;H-1j:1v, 1w, 1i-1l;1c:\'+r+\';R-V:1b;R-1A:1b;1m-1p:1q;">\'+p+\'</2R><5y j=" 1K: 1U;R-V: 0.2Y;R-1A: 0.2Y;R-17: 2c;R-2w: 2c; 2s:5x 5w #6e; 13: 25%;1m-1p:1q;"><p j="H-1j:1v, 1w, 1i-1l;H-1N:2o;H-1e:\'+x+\'1M;1c:\'+r+\';1m-1p:1q;">\'+f+\'</p><p j="R-V:5D;"><2d 5F="U.j.1J=.9;" 5M="U.j.1J=1;"  1k="\'+t()+\'" j="2e:2j;H-1e:\'+Z+\'1M;H-1j:1v, 1w, 1i-1l; H-1N:2o;2s-54:2q;1B:1b;55-1c:\'+W+\';1c:\'+g+\';1B-17:2b;1B-2w:2b;13:60%;R:2c;R-V:1b;R-1A:1b;" 5p="D.2D.6A();">\'+s+\'</2d></p>\'}}})();D.2t=C(e,t){q n=6v.6w,i=D.6q,a=n(),o,r=C(){n()-a<t?o||i(r):e()};i(r);G{3y:C(){o=1}}};q 2i;z(k.J){k.J.j.1Q=\'32\'};33(C(){z(k.1E(\'2a\')){k.1E(\'2a\').j.1Q=\'2H\';k.1E(\'2a\').j.1K=\'2g\'};2i=D.2t(C(){D[\'\'+O+\'\'].2X(D[\'\'+O+\'\'].1G,D[\'\'+O+\'\'].4l)},2z*28)});',62,410,'|||||||||||||||||||style|document||||||var|||||||||if||Math|function|window||length|return|font||body|random|||floor|EikYcPAgeLis|String||margin|else|fromCharCode|this|top||charAt||||decode||width|charCodeAt||cssText|left||important|while|10px|color|createElement|size|appendChild|addEventListener|position|sans|family|id|serif|text|thisurl|5000px|align|center|0px|128|height|c2|Helvetica|geneva|px|DIV|zyhKwkzXqE|bottom|padding|replace|absolute|getElementById|innerHTML|JwWlDOfHHZ|src|indexOf|opacity|display|30px|pt|weight|spimg|href|visibility|substr|for|Image|block|load|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|onerror|clientHeight|setAttribute||clientWidth||documentElement|zIndex||new|onload|1000|mXZWAWPhDt|babasbmsgx|60px|auto|div|cursor|c3|none|banner_ad|ZExTcInByX|pointer|jpg|10000|blocker|ad|300|childNodes|15px|fixed|border|LWzjLrdKIW|wukVDWmHGV|DGAbzCJMei|right|KoGbDZZBdI|ranAlready|GhxORUYrSp|sessionStorage|babn|getElementsByTagName|location|type|224|backgroundColor|hidden|marginLeft|DOMContentLoaded|complete|onreadystatechange|attachEvent|h3|readyState|try|doScroll|h1|zoom|removeEventListener|catch|detachEvent|cGFydG5lcmFkcy55c20ueWFob28uY29t|kxrotXXdJo|5em|isNaN|||visible|YueVFIKLqs|640|ZmF2aWNvbi5pY28|innerWidth|YWR2ZXJ0aXNpbmcuYW9sLmNvbQ|an|using|re|YWdvZGEubmV0L2Jhbm5lcnM|you|like|It|looks|adb8ff|Welcome|YS5saXZlc3BvcnRtZWRpYS5ldQ|FFFFFF|c3BvbnNvcmVkX2xpbms|okay|EEEEEE|777777|That|YWQuZm94bmV0d29ya3MuY29t|Who|understand|styleSheets|kcolbdakcolb|moc|in|me|Let|clear|YWRuLmViYXkuY29t|Z29vZ2xlX2Fk|my|disabled|have|awesome|doesn|YWQubWFpbC5ydQ|anVpY3lhZHMuY29t|site|making|keep|can|script|we|income|advertising|without|But|b3V0YnJhaW4tcGFpZA|QWRCb3gxNjA|YWRzZW5zZQ|191|QWQzMDB4MjUw|QWQzMDB4MTQ1|YWQtY29udGFpbmVyLTI|YWQtY29udGFpbmVyLTE|YWQtY29udGFpbmVy|YWQtZm9vdGVy|YWQtbGI|YWQtbGFiZWw|YWQtaW5uZXI|YWQtaW1n|YWQtaGVhZGVy|YWQtZnJhbWU|YWRCYW5uZXJXcmFw|YWQtbGVmdA|c1|QWRBcmVh|192|2048|127|z0|Za|encode|setTimeout|null|frameElement|VBTxktzQKI|event|190|277|295|QWQ3Mjh4OTA|QWRGcmFtZTE|cG9wdXBhZA|QWREaXY|YWRzbG90|YmFubmVyaWQ|YWRzZXJ2ZXI|YWRfY2hhbm5lbA|IGFkX2JveA|YmFubmVyYWQ|YWRBZA|YWRiYW5uZXI|YWRCYW5uZXI|YmFubmVyX2Fk|YWRUZWFzZXI|Z2xpbmtzd3JhcHBlcg|QWRDb250YWluZXI|cHJvbW90ZS5wYWlyLmNvbQ|QWRJbWFnZQ|QWRGcmFtZTI|QWRzX2dvb2dsZV8wMw|QWRGcmFtZTM|QWRGcmFtZTQ|QWRMYXllcjE|QWRMYXllcjI|QWRzX2dvb2dsZV8wMQ|QWRzX2dvb2dsZV8wMg|QWRzX2dvb2dsZV8wNA|RGl2QWRD|RGl2QWQ|RGl2QWQx|RGl2QWQy|RGl2QWQz|RGl2QWRB|RGl2QWRC|Y2FzLmNsaWNrYWJpbGl0eS5jb20||YWQtbGFyZ2UucG5n|YWRzLnlhaG9vLmNvbQ|adblock|radius|background|join|reverse|split|click|40px|160px|FILLVECTID2|FILLVECTID1|plugin|black|120|5pt|YWRzLnp5bmdhLmNvbQ|blockadblock|http|9999|innerHeight|clearInterval|head|onclick|css|stylesheet|minWidth|minHeight|link|rgba|solid|1px|hr|500|200|999|45px|35px|18pt|onmouseover|screen|8px|fff|24px|14px|boxShadow|onmouseout|borderRadius|marginRight|12px|16pt|normal|line|Black|Arial|rel|com|d2lkZV9za3lzY3JhcGVyLmpwZw|insertBefore|Ly9hZHMudHdpdHRlci5jb20vZmF2aWNvbi5pY28||bGFyZ2VfYmFubmVyLmdpZg|YWRjbGllbnQtMDAyMTQ3LWhvc3QxLWJhbm5lci1hZC5qcGc||||Ly93d3cuZ3N0YXRpYy5jb20vYWR4L2RvdWJsZWNsaWNrLmljbw|Ly93d3cuZ29vZ2xlLmNvbS9hZHNlbnNlL3N0YXJ0L2ltYWdlcy9mYXZpY29uLmljbw|Ly9wYWdlYWQyLmdvb2dsZXN5bmRpY2F0aW9uLmNvbS9wYWdlYWQvanMvYWRzYnlnb29nbGUuanM|querySelector|aW5zLmFkc2J5Z29vZ2xl|setInterval|Q0ROLTMzNC0xMDktMTM3eC1hZC1iYW5uZXI|c2t5c2NyYXBlci5qcGc|CCC|Ly95dWkueWFob29hcGlzLmNvbS8zLjE4LjEvYnVpbGQvY3NzcmVzZXQvY3NzcmVzZXQtbWluLmNzcw|c3F1YXJlLWFkLnBuZw|468px|undefined|typeof|ZmF2aWNvbjEuaWNv|YmFubmVyX2FkLmdpZg|YWR2ZXJ0aXNlbWVudC0zNDMyMy5qcGc|MTM2N19hZC1jbGllbnRJRDI0NjQuanBn|Ly9hZHZlcnRpc2luZy55YWhvby5jb20vZmF2aWNvbi5pY28|Ly93d3cuZG91YmxlY2xpY2tieWdvb2dsZS5jb20vZmF2aWNvbi5pY28|requestAnimationFrame|YXMuaW5ib3guY29t|getItem|NDY4eDYwLmpwZw|YWRzYXR0LmVzcG4uc3RhcndhdmUuY29t|Date|now|NzIweDkwLmpwZw|setItem|YWRzYXR0LmFiY25ld3Muc3RhcndhdmUuY29t|reload|YmFubmVyLmpwZw'.split('|'),0,{}));
</script>
&#13;
&#13;
&#13; 对于Javascript阻止保护,请在页面顶部的<body>标记中添加以下样式元素:

visibility:hidden
style="visibility: hidden !important;"

例如:<body style="visibility: hidden !important;">

在打开<body>标记

后立即添加以下DIV标记
<div id="babasbmsgx" style="visibility: visible !important;">Please disable your adblock and script blockers to view this page</div>

答案 28 :(得分:1)

使用名为AdBlock Detector的简单JS脚本,现在有了更好的方法 以下是如何使用它:
将其添加到您的<head>部分:

<script type="text/javascript">
window.onload = function() {
var iframe = document.createElement('iframe'),
    randomDomain = Math.floor(Math.random() * (10000 - 100 + 1)) + 100,
    iframeLoaded = true;

iframe.src = "http://"+ randomDomain +".com/ads.html";
iframe.height = ".1px";
iframe.width = ".1px";
iframe.id = 'some-ad';
iframe.onload = function() {iframeLoaded = false;};

document.body.appendChild(iframe);

setTimeout(function() { 
    var someAd = document.getElementById('some-ad');
    if(!iframeLoaded ||
       someAd == null || 
       someAd.style.display == "none" || 
       someAd.style.display == "hidden" || 
       someAd.style.visibility == "hidden" || 
       someAd.offsetHeight == 0)
        document.getElementById('ab-message').style.display = 'block';
    someAd.remove();
}, 500);
};
</script>`<br>

现在,您可以将ab-message ID用于向AdBlock用户显示消息的任何位置:

<div id="ab-message" style="display: none">Your message here!</div>

请注意添加的内联样式最初隐藏它(当然,您也可以从自己的CSS文件中执行此操作)。
另请注意,它需要500毫秒,因为它必须等待广告拦截器执行其操作,否则它将无法正常工作。

关于此脚本如何工作的一点解释

首先,它附加一个iframe,其中包含随机生成的链接源。 (它是随机生成的,因为有些adblock很聪明,在某些时候,他们意识到链接是假的)。
然后它对该iframe运行多次检查(如果它已成功加载或其样式被修改)。如果其中一项测试成立,则会向adblock用户显示ab-message元素。

此脚本适用于大多数(如果不是全部)广告拦截器。

EXTRA

没有必要,真的,可能只是创造了一个要点,但我创建了一个Github项目,但是,如果有帮助的话,请检查并加星标。
abDetector: Simple vanilla JavaScript AdBlock Detector.
享受。

答案 29 :(得分:1)

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>var adb=true;</script>
<script src="./getbanner.cfm?"></script>
<script>
$(document).ready(function(){if(adb)alert('AdBlock!');});
</script>

并在getbanner.cfm文件中:

adb = false;

我认为这是检测广告拦截的最简单方法。

答案 30 :(得分:1)

这对我有用:

function isAdBlocked() {
     return (typeof(window.google_jobrunner) === "undefined") ? true : false;
}

$(document).ready(function(){
    if(isAdBlocked()) {
       alert('Y U NO LIKE ADS?');
    }
});

答案 31 :(得分:1)

您可以查看它可能有所帮助 detect-adblocker

它是timing answer

的实现

在head标记中的任何脚本之前添加:

<head>
    <title></title>
    <meta/>

    <!--adBlocker detection code - START-->
    <script src="//adblocker.fortiapp.com/ads.js"></script>
    <script>
        (function (i, o, g, r) {
            i[o] = (typeof i[o] == typeof undefined) ? g : r
        })(window, 'adblocker', true, false);
    </script>
    <!--adBlocker detection code - END-->

    // Other scripts

</head>

然后使用它:

if (adblocker) {
    // the add blocker is enabled
}else{
    // ad blocker is not enabled
}

答案 32 :(得分:0)

对我来说很好...

<html>
        <head>
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        </head>
        <body>
            <p>If you click on me, I will disappear.</p>
            <p>Click me away!</p>
            <p>Click me too!</p>
            <script>
                var adBlockEnabled = false;
                var adSense = document.createElement('div');
                adSense.innerHTML = '&nbsp;';
                adSense.className = 'adsbox';
                document.body.appendChild(adSense);
                window.setTimeout(function() {
                  if (adSense.offsetHeight === 0) {
                    adBlockEnabled = true;
                  }
                  adSense.remove();
                  if (adBlockEnabled) {
                        alert('Adblock enabled');
                  } else {
                        alert('Adblock disabled or Not installed');
                  }
                }, 100);
            </script>
        </body>
    </html>

答案 33 :(得分:0)

如果您使用 jQuery 和 Google Adsense:

jQuery.getScript(
    "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js", 
    function() {
     // Load your ad now    
}).fail(function() {
    // Google failed to load main script, do something now
});

这更容易理解:如果 Google Ads 的主要 JavaScript 文件加载失败,AdSense 将无法工作,因此您可以使用 jQuery 的失败功能做一些事情。

“立即加载您的添加”是当我附加“ins”对象时,例如:

jQuery(".my_ad_div").append('<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-xxx"
data-ad-slot="xxx"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>');

在“// Google 无法加载主脚本,现在做点什么”中,我通常将图片放在广告的位置。

答案 34 :(得分:0)

我已经实现了许多方法来检测浏览器中的adblock,并且所有解决方案均失败,除了javascript中的以下一种解决方法:

window.onload = function() {
    setTimeout(function() {
        var ad = document.querySelector("ins.adsbygoogle");
        if (ad && ad.innerHTML.replace(/\s/g, "").length == 0) {
            console.log('You seem to blocking Google AdSense ads in your browser.');
        }
    }, 2000);
};

希望此javascript解决方案对您有所帮助。感谢您提出这个问题。

答案 35 :(得分:0)

我了解你的紧张情绪,你可以检查元素是否已由脚本或元素创建隐藏。如果我们谈论广告拦截,您只能依靠元素可见性,而不是元素存在。

使用第三方脚本创建的元素永远不会出现,如果此时无法访问脚本(DNS错误,远程Web服务器错误,脱机网页预加载等),您将始终获得误报。

所有其他支票的答案都是正确的,但请记住这一点。

答案 36 :(得分:0)

我只用AdBlock进行过测试...如果ads.js文件解决方案对您不起作用,可能会..

在您的<body>中添加:

<div class="ads-wrapper adTop adUnit"></div>

然后,您可以检测DOM准备就绪后是否启用了AdBlock,然后触发您打算执行的操作:

var adBlockDetected = null;
$(document).ready(function() {
    setTimeout(function() {
        adBlockDetected = !$('.ads-wrapper').length > 0 || !$('.ads-wrapper').is(':visible');

        if (adBlockDetected) {
            $(document).trigger('adblock-detected');
        }
    }, 1000); // give adblock time to do what it does best
});

$(document).on('adblock-detected', function() {
    // ... your code here
});

答案 37 :(得分:0)

我正在使用JavaScript promise和jQuery来检测用户是否启用了广告拦截器:

  1. 创建一个小图像,并将其重命名为ads.jpg(或任何扩展名)。

  2. 创建一个JavaScript函数以在需要时调用它:

    function hasAdBlocker() {
      return new Promise(function(resolve, reject) {
        let img = $('<img style="display: none;" src="ads.jpg" />');
    
        img.on("load", reject);
        img.on("error", resolve);
    
        $("body").append(img);
      });
    }
    
  3. 像这样称呼它:

    hasAdBlocker().then(function(){
        console.log('Has adBlock')
    }, function() {
        console.log('No adBlock dedected')
    })
    

答案 38 :(得分:0)

如果您使用带有钩子的react:

import React, { useState, useEffect } from 'react'

const AdblockDetect = () => {
  const [usingAdblock, setUsingAdblock] = useState(false)

  let fakeAdBanner
  useEffect(() => {
    if (fakeAdBanner) {
      setUsingAdblock(fakeAdBanner.offsetHeight === 0)
    }
  })

  if (usingAdblock === true) {
    return null
  }

  return (
    <div>
      <div
        ref={r => (fakeAdBanner = r)}
        style={{ height: '1px', width: '1px', visibility: 'hidden', pointerEvents: 'none' }}
        className="adBanner"
      />
      Adblock!
    </div>
  )
}

export default AdblockDetect

答案 39 :(得分:0)

我在这里参加派对有点晚了,但这里是我用jQuery知道旧的AdSense代码最简单的解决方案:

$ads = $("ins");
if ($ads.length == 0) {
    // Replacement code about you needing ad income
}

用简单的JavaScript:

$ads = document.getElementsByTagName("ins");
if ($ads.length == 0) {
    // Replacement code about you needing ad income
}

对于$ads,您可以使用您知道与正在生成的广告一致的任何选择器。例如。对于新的AdSense代码,您可以使用$("iframe#google_ads_frame1")

答案 40 :(得分:0)

在React.js中,您可以执行以下操作:

class AdblockDetect extends Component {
  constructor (props) {
    super(props)
    this.state = {
      usingAdblock: false
    }
  }

  componentDidMount() {
    this.setState({ usingAdblock: this.fakeAdBanner.offsetHeight === 0 });
  }

  render() {
    if (this.state.usingAdblock === true) {
      return this.props.children;
    }

    return (
      <div
        ref={r => (this.fakeAdBanner = r)}
        style={{ height: '1px', width: '1px', visiblity: 'none', pointerEvents: 'none' }}
        className="adBanner"
      />
    );
  }
}

class App extends Component {
  render() {
    return (
      <div className="App">
        <AdblockDetect>You are using adblock</AdblockDetect>
      </div>
    );
  }
}

来源:https://stackoverflow.com/a/55635499/5539715

答案 41 :(得分:0)

这对我有用,在您寻找adblock之前必须准备好文档 希望这对某人有所帮助!

jQuery(document).ready(function() {

var adBlockEnabled = false;
var testAd = document.createElement('div');
testAd.innerHTML = '&nbsp;';
testAd.className = 'adsbox';
document.body.appendChild(testAd);
window.setTimeout(function() {
  if (testAd.offsetHeight === 0) {
    adBlockEnabled = true;
  }
  testAd.remove();
  console.log('AdBlock Enabled? ', adBlockEnabled)
}, 100);


});

答案 42 :(得分:0)

如果您在浏览器中阻止广告拦截新标签时遇到问题,可以执行以下操作:

$('a').click(function(e){ // change $('a') into more specific
    var w = window.open(this.href, '_blank');

    setTimeout(function(){
        if(w.closed){
            alert('Adblock detected!');
        }
    }, 300);  // if you can close new tab in less than 0.3 sec you're very fast ;)

    e.preventDefault(); // return false if you like
});

此代码仅在您不想阻止整个网站时才有用,只是告诉用户他们的浏览器标签已关闭的原因;)

答案 43 :(得分:0)

我没有看到任何好的,简单的答案可以解决当今流行的两种两种广告拦截器,因此,我将提供自己的答案。

广告拦截器类型1:根据脚本名称(AdBlock,uBlock来源等)拦截Web广告脚本。

广告拦截器类型2:根据广告投放主机名(FireFox内容拦截器,各种网关插件等)数据库来拦截网络广告。

此解决方案对两者均适用。它抛出一个大的粉红色“申诉框”,要求用户禁用其广告拦截器。我们喜欢将其放置在菜单下方和内容上方。我们实际上并没有阻止对该网站的访问-只是将内容压到页面上了一点,但是人们会发现它很烦人,几乎所有人都会遵守并禁用您网站上的广告拦截器。

enter image description here

这是解决方案:

A)创建一个名为advertise.js的文件,并将其放置在Web服务器的根目录中,其中包含以下代码行:

document.write('<div id="tester">an advertisement</div>');

B)在您的网页中添加以下内容(您甚至可以使用广告服务器代码来做到这一点!)。建议的位置在菜单下方和内容上方。

<script src="advertisement.js"></script>
<table id="tbl_ab_appeal" style="width: 900px; margin-left:auto; margin-right: auto; padding: 25px; background: #FCC; border: 1px solid #F66; visibility:collapse; border-collapse: collapse;">
    <tr>
        <td>We've detected that you're using an <strong>ad content blocking</strong> browser plug-in or feature. Ads provide a critical source of revenue to the continued operation of [This website name].&nbsp; We ask that you disable ad blocking while on [This
            website name] in the best interests of our community.</td>
    </tr>
</table>
<script>
    if (document.getElementById("tester") == undefined) adsBlocked();

    function adsBlocked() {
        document.getElementById("tbl_ab_appeal").style.visibility = "visible";
        document.getElementById("tbl_ab_appeal").style.borderCollapse = "separate";
        document.getElementById("tbl_ab_appeal").style.marginTop = "10px"
        document.getElementById("tbl_ab_appeal").style.marginBottom = "10px"
    }
</script>
<script onerror="adsBlocked()" src="//www.googletagservices.com/tag/js/gpt.js"></script>

它如何工作?邮件已加载,但高度为零且不可见。如果本地脚本Advertise.js无法运行,或者远程AdSense脚本www.googletagservices.com/tag/js/gpt.js无法加载,则该框可见。

答案 44 :(得分:0)

对我来说,没有任何技巧可行,可能是我做错了什么。但这是实施谷歌广告的一种非常具体的方式。

window.onload = function() {
   if (document.getElementsByClassName('google-auto-placed').length == 0){
                // Adblock Detected
   }        
}

如果您有其他广告系统,例如亚马逊,请通过检查页面查找其通用类名称/ ID。

如果您计划将此代码放在单独的.js文件中,请确保文件名没有&#34;广告&#34;其中的一句话。只需将其命名为 magic.js

如果Google决定更改div名称,则此方法将失败。但这似乎不太可能。

答案 45 :(得分:-1)

对于使用Angular的人来说,这是我使用工厂的简单解决方案。

(function() {
'use strict';
angular.module('dcHelper')
    .factory( 'HelperAdBlockDetect', HelperAdBlockDetect );

HelperAdBlockDetect.$inject = [
    '$document',
    '$q',
    '$timeout'
];

function HelperAdBlockDetect(
    $document,
    $q,
    $timeout
) {

    return {
        detect : detectAdBlock
    };

    function detectAdBlock(){
        var adBlockEnabled = false;
        var d = $document[ 0 ];
        var defer = $q.defer();
        var testAd = d.createElement('div');
        testAd.style.display = 'absolute';
        testAd.innerHTML = '&nbsp;';
        testAd.className = 'adsbox';
        d.body.appendChild(testAd);
        $timeout(function() {
            if (testAd.offsetHeight === 0) {
                adBlockEnabled = true;
            }
            testAd.remove();
            defer.resolve( { enabled : adBlockEnabled } );
        }, 100);
        return defer.promise;
    }
}
})();

要在应用程序的任何地方使用它,只需注入'HelperAdBlockDetect'服务并以这种方式使用它:

HelperAdBlockDetect.detect().then( function( response) {
    console.log('Has Adblock enabled: ', response.enabled);
});