Как отфильтровать пост-сообщения? - PullRequest
0 голосов
/ 18 февраля 2019

На странице пожертвования клиента (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>
...