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

我希望能够在用户访问我的网站时检测用户是否使用了广告拦截软件。如果他们正在使用它,我想显示一条消息,要求他们关闭它以支持该项目,就像这个网站一样。 如果您进入该网站并且您的浏览器启用了某种广告拦截软件,则该网站会显示一个小横幅,告诉用户该广告收入用于托管项目,他们应考虑关闭Adblock 。 我想在我的网站上这样做,我正在使用adsense广告,我该怎么做?     
已邀请:
我的解决方案并非特定于某个广告网络,而且非常轻量级。我已经在生产中运行了几年。 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 Plus Adblock Pro Ghostery的 2019-02-15更新: 在上面的列表中添加了Ghostery,因为扩展现在也阻止了对ads.js的请求。非常便利。这是否意味着Ghostery实际上正在帮助我们开发人员检测广告的扩展名? 不适用于: 隐私獾     
这不是一个直接的答案,但我会将广告背后的信息加载...而不是试图检测它,它只会在广告没有时显示出来。     
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
都是一个问题)。     
没有额外的要求。没有外部库。简单明了的JavaScript:
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);
大多数广告都是在javascript中动态加载的。我刚刚使用onerror事件来检测是否可以加载广告脚本。似乎工作。 GoogleAds示例:
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" onerror="adBlockFunction();"></script>
这也可以用于其他元素,以查看广告拦截器是否阻止内容。如果远程元素不存在或无法到达,则此方法可能会产生误报。     
要检测用户是否阻止了广告,您只需在广告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     
我用jquery最简单的解决方案是:
$.ajax({
    url: "/scripts/advertisement.js", // this is just an empty js file
    dataType: "script"
}).fail(function () {
    // redirect or display message here
});
advertisement.js只包含任何内容。当有人使用adblock时,它会失败并调用该函数。     
我知道已经有足够的答案了,但是自从谷歌在这个主题上搜索“检测广告块”这个问题以来,我想提供一些见解,以防你没有使用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尚未启动。我没有打扰进一步调查。     
我的建议是:不要这样做! 任何将人视为“违法者”的情况都会导致他们反击。 这是我的建议。 在页面顶部放置一个小的不显眼的消息(无论广告是否被阻止),文本为
I *totally* respect your right to block ads
,另一个页面/弹出窗口为
Read more ...
。 在另一页上,清楚地表明您了解它是他们的计算机并且他们可以自由地使用广告拦截。 还要以非指责的方式明确指出,使用这些阻止程序会使您更难以提供优质内容(详细说明原因),而且您希望广告拦截不会发生在您的网站上,这完全是他们的决定。专注于关闭阻止的积极因素。 那些强烈反对广告的人会忽视这一点,但无论如何你都没有机会说服他们。那些漠不关心的人很可能会被你的吸引力所左右,因为你不是在做“让我走自己的路,或者我会把球带回家”,这应该是五岁儿童的专属领域。 记住,没有人拿着枪对着你的头,迫使你把你的东西放在网上。尊重您的读者/用户,您可能会发现其中很多人会回报。     
他们利用了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>
    
我注意到以前的评论使用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();
   }
});
“ablockercheck”是adblocker阻止的ID。因此,检查它是否可见,您可以检测adblocker是否已打开。     
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: ...}
。在一定时间后检查变量的类型可以告诉您脚本是否已加载。     
只需在您的网站上添加小脚本:
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>
在这里找到了解决方案     
我在我的网站上使用这种方法,也许你会觉得它很有帮助。在我看来,这是最简单的解决方案。 AdBlocker会阻止特定的类和html元素,通过检查开发者控制台中任何被阻止的广告的这些选择器(它们都已列出),您可以看到哪些元素将始终被阻止。 例如。只需在stackoverflow上检查此问题页面,您就会看到一堆被屏蔽的广告。 例如,任何具有
bottom-ad
类的元素都会被自动阻止。 我用
bottom-ad
类创建了一个非空的div元素:
<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
页面加载后,只检查该元素是否隐藏。我使用jQuery,但随意使用javascript:
$('.bottom-ad').css('display') == "none"
甚至更好用
$('.bottom-ad').is(':visible')
如果值为
true
,则AdBlocker处于活动状态。     
您不需要额外的HTTP请求,您可以简单地计算假添加的高度。 顺便说一下,这里有一个完整的列表,与adblockers避免渲染的元素相匹配。
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>
安全的方法是将您的广告包装在
<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防火墙。     
检查是否存在广告拦截的有效方法: 只需尝试触发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();
    });
};
此解决方案适用于所有类型的广告,而不仅仅是谷歌广告。     
如果使用新的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代码(注意在调用
adsbygoogle.js
脚本时不要使用
"async"
标志):
<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
然后在下面添加以下代码:
<script>
if (!adsbygoogle.loaded) {
   // do something to alert the user
}
</script>
AdSense会在广告加载时始终创建/设置标记
adsbygoogle.loaded
true
。您可以将支票放入setTimeout函数以将检查延迟几秒钟。     
尽管这个问题已经存在,但我最近发现它非常有用,因此只能假设还有其他人仍在查看它。在看了这里和其他地方之后,我猜测主要的三个客户端检查间接检测广告拦截器是检查阻止
div
/
img
,阻止
iframe
s和阻止资源(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添加到文档中。然后,当加载窗口时,即内容包括。图片等已加载,我们检查: 第一个测试div的尺寸和可见性。 第二个测试div的内容是“检查”,因为如果
advertimsent.js
没有被阻止的话。 iframe的维度(我猜可见性,隐藏对象没有高度或宽度?) 和风格:
div#myTestAd, iframe#adServer
{
    display: block;
    position: absolute;
    left: -9999px;
    top: -9999px;
}

div#myTestAd2
{
    display: none;
}
希望这可以帮助     
我知道这已经回答了,但我查看了建议的示例网站,我看到他们这样做:
<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>
    
不需要超时和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';
});
    
刚刚创建了我自己的“插件”来解决这个问题,它的效果非常好: adBuddy + jsBuddy: ADBuddy JSBuddy GitHub 我添加了移动兼容性和jsBlocking检测......(就像向用户显示要求他们禁用adBlocking / jsBlocking软件的叠加层);也使它响应友好。 它是根据Coffeeware许可证开源的。     
<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;
我认为这是检测adblock的最简单方法。     
这对我有用:
function isAdBlocked() {
     return (typeof(window.google_jobrunner) === "undefined") ? true : false;
}

$(document).ready(function(){
    if(isAdBlocked()) {
       alert('Y U NO LIKE ADS?');
    }
});
    
timing's
答案很好看,但没有更多的工作,所以我已经将'js文件的名称从'ads'更新为'adsense',它就像魅力一样! 这是代码,也许这将帮助某人:
<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;
    
现在有一种更好的方法可以使用名为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>
现在,您可以在任何想要向AdBlock用户显示消息的位置使用
ab-message
id:
<div id="ab-message" style="display: none">Your message here!</div>
请注意添加的内联样式最初隐藏它(当然,您也可以从您自己的CSS文件中执行此操作)。 另请注意,它需要500毫秒,这是因为它必须等待广告拦截器执行其操作,否则它将无法正常工作。 这个脚本如何工作的一点解释 首先,它附加一个iframe,其中包含随机生成的链接源。 (它是随机生成的,因为有些adblock很聪明,在某些时候,他们意识到链接是假的)。 然后它对该iframe运行多次检查(如果它已成功加载或其样式被修改)。如果其中一个测试成立,则会向广告拦截用户显示
ab-message
元素。 此脚本适用于大多数(如果不是全部)广告拦截器。 额外 没有必要,真的,可能只是创建了一个要点,但我创建了一个Github项目,但是,如果它帮助了你,请检查它并为它加注星号.abDetector:Simple vanilla JavaScript AdBlock Detector。 请享用。     
您可以查看它可能会有所帮助 检测-adblocker 它实现了时序答案 在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
}
    
在adblock打开的情况下运行此选项,然后在页面上的
</body>
标记关闭之前将其粘贴到页面页脚中。
<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>
我了解你的紧张情绪,你可以检查元素是否已由脚本或元素创建隐藏。如果我们谈论广告拦截,您只能依靠元素可见性,而不是元素存在。 使用第三方脚本创建的元素将永远不会出现,如果此时无法访问脚本(DNS错误,远程Web服务器错误,脱机网页预加载等),您将始终获得误报。 所有其他检查答案都是正确的,但请记住这一点。     
我在这里参加派对有点晚了,但这是我用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")
。     

要回复问题请先登录注册