На странице пожертвования клиента (https://www.resurge.org/donate/), размером iframe управляет iframeResizer, который генерирует новое сообщение о нескольких событиях.
Тем временем я отправляю отдельное сообщение от родителя,содержащий объект Google Analytics с userId. Это сообщение отправляется после тайм-аута 0:02, чтобы убедиться, что iframe полностью загружен.
Мой прослушиватель событий постоянно извлекает сообщение iframeResizer. Когда это происходит, я могу его идентифицироватьи return
, но как я могу гарантировать, что iframe получит мой объект .ga?
На родительском элементе:
<script>
setTimeout(function(){
ga(function(tracker) {
var clientId = tracker.get('clientId');
var frameWindow = document.getElementById('my_iframe').contentWindow;
// change https://xyz.shoppingcart.com to match your iFrame domain
frameWindow.postMessage(clientId, 'https://app.etapestry.com');
});
}, 2000);
</script>
в iframe:
<script>
window.addEventListener('message', function(event) {
// Ignores messages from untrusted domains.
if (event.origin != 'https://www.resurge.org') return;
// test for [iFrameSizer]
if (event.data.slice(0, 13) === '[iFrameSizer]')
return;
// This code never runs:
// Creates the tracker with the data from the parent page.
ga('create', 'UA-19540393-1', 'auto', {clientId: event.data});
// write data to log
console.log("iFrame Child Page -- ID Creator in addEventListener", event.data);
ga('send', 'pageview');
});
</script>