我正在尝试使用以下脚本通过自定义HTML标签检测GTM中的adblock:

<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(而不是像上面的示例中那样发生在窗口加载事件上),并在“窗口加载”或“ DOM就绪”上使用触发器,其结果完全相同。当我在机器上对其进行测试时,它始终可以正常工作。

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

最佳答案

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

<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/

关于javascript - 用于检测adblock无效的GTM脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58998737/

10-13 03:03