Отслеживание поисковых запросов из iframe - PullRequest
0 голосов
/ 14 апреля 2020

Вкл. www.mypage.com У меня есть iframe с www.search.mypage.com. И у родительского фрейма, и у iframe есть контейнер GTM, к которому у меня есть доступ. Когда в iframe выполняется поиск, контейнер GTM iframe отправляет сообщение в родительский фрейм с данными. Это сообщение принимается eventlistener в родительском кадре, анализируется и передается в DL (datalayer родительского кадра).

Но когда пользователь уточняет поисковый запрос, новое сообщение Отправить. Я хочу иметь возможность хранить эти условия поиска, выполненные в одном сеансе, в Array, который должен быть передан в datalayer, поэтому я могу видеть, как уточнение выполнено пользователем сеанса.

Пример:

  1. поиск: [term1]
  2. поиск: [term1, term2]
  3. поиск: [term1, term2, term3]

Любые предложения о том, как этого можно достичь? У меня есть следующий слушатель события, прикрепленный к родительскому фрейму, который прослушивает событие, iframeSearchSubmit.

слушатель события добавлен в окно при загрузке первой страницы

<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,
              	'query': data.query
            });
          } 
            
         }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 Ответ

0 голосов
/ 15 апреля 2020

Я хочу иметь возможность сохранять эти условия поиска, выполненные в одном сеансе

Слой данных имеет область страницы, ie всякий раз, когда страница перезагрузка очищается, так что не сработает. Таким образом, вам нужно самостоятельно добавить некоторую форму персистентности , несколько вариантов:

Поскольку поддержка браузера может варьироваться, а кодирование может быть немного тяжелым , вы можете посмотреть библиотеки, которые обертывают / абстрагируют эти параметры хранения, чтобы вы могли написать более надежную реализацию с меньшим количеством кода:

Вот пример показывающий, как сохранить уровень данных GTM:

https://www.simoahava.com/analytics/two-ways-to-persist-data-via-google-tag-manager/* 107 8 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...