<script>
console.log({{bounce_checker}});
(function(){
window.addEventListener('beforeunload',checker, false);})();
function checker(event){
event.preventDefault();
console.log(event.type);
console.log({{bounce_checker}});
var validator = {{bounce_checker}};
if(validator == "value_lead")
{console.log('value_lead');}
else if(validator == undefined)
{console.log('bounced_user');}
</script>
在DOM Ready事件中,将上述代码部署为自定义HTML标签。在触发{{bounce_checker}} datalayer变量时,将不确定,但在用户交互后可以更改它。当发生" nunload"事件发生时,{{bounce_checker}}如果存在任何用户交互,则显示'value_lead'。
但是数据层变量没有动态变化。它总是像在DOM事件期间一样以"未定义"的形式出现。
有人可以告诉我为什么会发生这种情况吗?
在此代码中,您添加了一个侦听器,该侦听器利用{{bounce checker}} ar的值创建侦听器的那一刻,例如。不明确的。GTM不会更新该变量,因为它不是常规JS对象,而是评估某些值的表达式。考虑将某些事件切换到" toreNunload"上的Datalayer,然后在自定义事件触发的自定义HTML标签处处理{{Bounce Checker}}值,例如:
<!--DOM Ready Custom HTML Tag code -->
<script>
window.addEventListener('beforeunload',function(e) {dataLayer.push({'event':'beforeunload'})}, false);
</script>
<!--beforeunload Custom Event Custom HTML Tag code -->
<script>
console.log({{bounce_checker}});
var validator = {{bounce_checker}};
if(validator == "value_lead") {
console.log('value_lead');
// further processing of {{bounce_checker}} value
// ...
}
else if(validator == undefined) {
console.log('bounced_user');
// further processing of {{bounce_checker}} value
// ...
}
</script>
谢谢 @ @ @ @。这就说得通了。我还有其他解决方法可以解决我的问题,例如使用...循环或foreach循环手动解析数据层。
。 (function() {
window.addEventListener('beforeunload', checker, false);
})();
function checker(event) {
console.log(event.type);
console.log({
{
bounce_checker
}
});
var i;
var arr = window.dataLayer;
for (i = 0; i <= arr.length; i++) {
if (typeof(arr[i]) === 'undefined') {
console.log('caught error')
} else if (arr[i].bounced_user) {
var validator = arr[i].bounced_user;
} else {}
};
console.log({
{
bounce_checker
}
});
console.log(validator);
if (validator == "value_lead") {
console.log('value_lead');
} else if (validator == undefined) {
console.log('bounced_user');
}
console.log('testing success');
}
另外,在GTM社区论坛中,Simo Ahava建议我使用
var validator = window.google_tag_manager[{{container_ID}}].dataLayer.get('bounce_checker');