ajax网站上的criteo标记

时间:2018-02-20 14:09:20

标签: javascript turbolinks criteo

我在将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而没有页面重新加载时,它不起作用。事件不会出现在criteo中。

<script>
window.criteo_q.push(event_data);
</script>

任何想法有什么不对?

演示示例:https://jsfiddle.net/36jq9dLu/156/

2 个答案:

答案 0 :(得分:2)

每次要触发新事件时,都应该以编程方式重新导入加载程序。由于浏览器缓存了加载器,因此不会导致任何延迟,但这是必要的,因为它包含一些对重新初始化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/

答案 1 :(得分:0)

为了让Criteo OneTag在DOM更改后正确评估事件,您应该使用 requiresDOM 参数将窗口小部件设置为非阻塞模式。

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