Тэги criteo на сайте ajax
У меня проблема с интеграцией тегов 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 ответа
Вы должны программно импортировать загрузчик каждый раз, когда вы хотите запустить новое событие. Это не приведет к задержке, поскольку загрузчик кэшируется браузером, но это необходимо, поскольку он содержит некоторый код, полезный для повторной инициализации 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 || [];
Чтобы Criteo OneTag правильно оценивал события после DOM-изменения, вы должны перевести виджет в неблокирующий режим с помощью параметра requireDOM.
...
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);
...
Следующий фрагмент демонстрирует это: