我正在尝试使用以下脚本通过自定义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 = ' ';
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;"> </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/