I have a script inside a child google tag manager account which is firing on submission of an iframe form that is generated via javascript, this should be picked up via the parent google tag manager account through the dataLayer. I am following this tutorial: https://measureschool.com/iframe-tracking/
However it's not going into the dataLayer on the parent - hence the tag isn't firing. Can anyone help?
To confirm
Child tag manager account fires at: https://new.bokuntest.com/ - the iframe form URL
Parent tag manager account fires at: https://bokun.io/
URL of page with embedded iframe form: https://bokun.io/copy-of-free-trial
postMessage tag firing in child:
<script>
try {
var postObject = JSON.stringify({
event: 'iframeFormSubmit',
form: 'Registration'
});
parent.postMessage(postObject, 'https://new.bokuntest.com');
} catch(e) {
window.console && window.console.log(e);
}
</script>
Listener tag on parent (trigger = fire on all pages):
<script type="text/javascript">
(function(window) {
addEvent(window, 'message', function(message) {
try{
var data = JSON.parse(message.data);
var dataLayer = window.dataLayer || (window.dataLayer = []);
if (data.event) {
dataLayer.push({
'event': data.event,
'postMessageData': data
});
}
}catch(e){}
});
// Cross-browser event listener
function addEvent(el, evt, fn) {
if (el.addEventListener) {
el.addEventListener(evt, fn);
} else if (el.attachEvent) {
el.attachEvent('on' + evt, function(evt) {
fn.call(el, evt);
});
} else if (typeof el['on' + evt] === 'undefined' || el['on' + evt] === null) {
el['on' + evt] = function(evt) {
fn.call(el, evt);
};
}
}
})(window);
</script>
Trigger on parent (it's this that doesn't seem to be happening):
Form submission tag on parent:
Can anyone figure out what I've missed?
window.parent.postMessage(postObject, 'https://new.bokuntest.com');
try {
var postObject = JSON.stringify({
event: 'iframeFormSubmit',
form: 'Registration'
});
window.parent.postMessage(postObject, 'https://new.bokuntest.com');
} catch(e) {
window.console && window.console.log(e);
}