我在将Criteo标签集成到我的Ajax网站上有一个问题。当我发送第一个活动时,一切正常。
<script type="text/javascript" src="//static.criteo.net/js/ld/ld.js" async="true"></script>
<script type="text/javascript">
window.criteo_q = window.criteo_q || [];
window.criteo_q.push(event_data);
</script>
但是,当我尝试将另一个事件发送到没有页面重新加载的情况下时,它不起作用。事件不会出现在Criteo中。
<script>
window.criteo_q.push(event_data);
</script>
有什么想法是什么问题?
演示示例:https://jsfiddle.net/36jq9dlu/156/
您应每次要启动新事件时编程地重新接口加载程序。这不会导致任何延迟,因为加载程序由浏览器缓存,但由于包含一些代码可重新初始化criteo_q
对象,因此是必要的。您可以在每个事件发生之前添加以下行:
window.criteo_q = undefined;
script = document.createElement('script');
script.src = '//static.criteo.net/js/ld/ld.js';
script.async = 'true'
document.head.appendChild(script);
window.criteo_q = window.criteo_q || [];
https://jsfiddle.net/36jq9dlu/199/
为了使criteo onetag在dom-change之后正确评估事件,应通过使用 quirateSessdom 参数将窗口小部件设置为非块模式。
...
events = [
{ event: 'setAccount', account: 123456 },
{ event: 'setHashedEmail', email: '1234567890asdf' },
{ event: 'setSiteType', type: 'd' },
{ event: 'viewHome' },
{ requiresDOM: "non-blocking", cb:
$(document.body).on("page:changed", function() {
product_event =
[
{ event: 'setAccount', account: 123456 },
{ event: 'setHashedEmail', email: '1234567890asdf' },
{ event: 'setSiteType', type: 'd' },
{ event: "viewItem", product: 123 }
]
criteo_q.push(product_event)
})
}
]
window.criteo_q.push(events);
...
摘要之后证明了这一点:
https://jsfiddle.net/yuxqrfev/5/