【问题标题】:GTM script for detecting adblock not working用于检测 adblock 的 GTM 脚本不起作用
【发布时间】:2019-11-22 17:04:48
【问题描述】:

我正在尝试使用以下脚本使用自定义 HTML 标记检测 GTM 中的广告拦截:

<script type="text/javascript">
    (function() {
        var adClass = 'pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad text_ads text-ads text-ad-links';
        var adStyle = 'width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;';

        var sendAdBlockEvent = function(result) {
            var data = {
                event: 'adBlock',
                adBlockEnabled: result
            }
            window.dataLayer.push(data);
        }

        var checkElement = function(elem) {
            if (window.document.body.getAttribute('abp') !== null ||
                elem.offsetParent === null ||
                elem.offsetHeight == 0 ||
                elem.offsetLeft == 0 ||
                elem.offsetTop == 0 ||
                elem.offsetWidth == 0 ||
                elem.clientHeight == 0 ||
                elem.clientWidth == 0) {
                return 1;
            }
            if (window.getComputedStyle !== undefined) {
                var elemTemp = window.getComputedStyle(elem, null);
                if (elemTemp && (elemTemp.getPropertyValue('display') == 'none' || elemTemp.getPropertyValue('visibility') == 'hidden')) {
                    return 1;
                }
            }

            return 0;
        }

        var checkAdBlock = function() {
            //create bait
            var bait = document.createElement('div');
            bait.innerHTML = '&nbsp;';
            bait.setAttribute('class', adClass);
            bait.setAttribute('style', adStyle);
            window.document.body.appendChild(bait);

            window.setTimeout(function() {
                sendAdBlockEvent(checkElement(bait));
                window.document.body.removeChild(bait);
            }, 1);
        }

        if (!window.dataLayer) {
            window.dataLayer = [];
        }

        if (document.readyState === 'complete') {
            checkAdBlock();
        } else if (window.addEventListener !== undefined) {
            window.addEventListener('load', checkAdBlock, false);
        } else {
            window.attachEvent('onload', checkAdBlock);
        }

    })();
</script>

它似乎无法正常工作,因为只有略高于 1% 的人正在使用 adblock(adBlockEnabled 等于 1),并且有超过 25% 的会话没有 0 或 1。我还尝试修改脚本并检查adblock 立即(而不是像上面的示例那样在窗口加载事件上)并在“Window Loaded”或“DOM Ready”上使用触发器,结果完全相同。当我在我的机器上测试它时,它总是能正常工作。

任何想法有什么问题吗?提前致谢。

【问题讨论】:

    标签: javascript google-analytics google-tag-manager


    【解决方案1】:

    试试这个代码来检测 adBlock。它是一个 HTML 自定义标签,带有一个 DIV 元素,用作 AdBlock 诱饵和一个 JavaScript 代码 (jQuery),用于检查 DIV 是否会被 AdBlock 隐藏。在 dataLayer 中推送一个值 0 或 1,以便您可以根据需要对其进行调整:

    <div id="bottomAd" style="font-size: 2px;">&nbsp;</div>
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    
    <script>
    
    $(document).ready( function() {
      window.setTimeout( function() {
        var bottomad = $('#bottomAd');
    
        if (bottomad.length == 1) {
          if (bottomad.height() == 0) {
            dataLayer.push({'event': 'ir.adBlock', 'adBlockDetected': '1' });
          } else {
            dataLayer.push({'event': 'ir.adBlock', 'adBlockDetected': '0' });
          }
        }      
      }, 1);
    });
    
    </script>
    

    代码来源:https://www.tagmanageritalia.it/guida-avanzata-tracciare-adblock-google-tag-manager/

    【讨论】:

    • 这种方法的问题是需要编辑页面内容,我需要一些可以在每个站点上使用的 GTM 唯一解决方案。
    • 您不需要编辑页面内容,只需将上面的代码插入 GTM 中的自定义 HTML 标记中,并在“所有页面”上触发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2016-04-04
    • 2016-10-04
    • 1970-01-01
    • 2015-11-09
    • 2015-09-23
    • 1970-01-01
    相关资源
    最近更新 更多