postMessage 未推入 dataLayer
Posted
技术标签:
【中文标题】postMessage 未推入 dataLayer【英文标题】:postMessage not pushing into the dataLayer 【发布时间】:2021-12-01 22:49:43 【问题描述】:我在子 google 标记管理器帐户中有一个脚本,该脚本在提交通过 javascript 生成的 iframe 表单时触发,这应该通过父 google 标记管理器帐户通过 dataLayer 获取。我正在关注本教程:https://measureschool.com/iframe-tracking/
但是它不会进入父级的 dataLayer - 因此标签不会触发。有人可以帮忙吗?
确认
子标签管理器帐户在以下位置触发:https://new.bokuntest.com/ - iframe 表单 URL
父标签管理器帐户在以下位置触发:https://bokun.io/
嵌入 iframe 表单的页面 URL:https://bokun.io/copy-of-free-trial
在孩子中触发 postMessage 标记:
<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>
父级上的侦听器标记(触发器 = 在所有页面上触发):
<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>
在父级上触发(这似乎没有发生):
父表单提交标签:
谁能弄清楚我错过了什么?
【问题讨论】:
【参考方案1】: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);
【讨论】:
以上是关于postMessage 未推入 dataLayer的主要内容,如果未能解决你的问题,请参考以下文章