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的主要内容,如果未能解决你的问题,请参考以下文章

连接显示为null,磨损未从DataLayer接收

PDF postMessage 未定义

Javascript Nodejs值未推入数组[重复]

将控制器推入堆栈后,后退按钮未显示

即使将元素推入其中,数组元素也未定义[重复]

GTM“dataLayer.push”是从前端开发人员更新数据层的唯一方法吗?