如何过滤postMessages?

时间:2019-02-17 22:02:22

标签: iframe google-analytics cross-domain postmessage iframe-resizer

在客户的捐赠页面(https://www.resurge.org/donate/)上,iframe的大小由iframeResizer管理,该iframeResizer会在多个事件上生成新消息。

与此同时,我正在从父级发送一条单独的消息,其中包含带有userId的Google Analytics(分析)对象。在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>

0 个答案:

没有答案