【发布时间】: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 = ' ';
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