【发布时间】:2020-04-21 21:37:53
【问题描述】:
在www.mypage.com 上,我有一个带有www.search.mypage.com 的iframe。父框架和 iframe 都有一个我可以访问的 GTM 容器。
在 iframe 中进行搜索时,iframe GTM 容器会向父框架发送一条带有数据的消息。此消息被父框架中的eventlistener 拾取,解析并推送到DL(父框架的datalayer)。
但是当用户细化搜索词时,会发送一条新消息。我希望能够将在同一个会话中完成的这些搜索词存储在一个Array 中,然后推送到datalayer,这样我就可以看到会话的用户完成了细化。
例子:
- 搜索:
[term1] - 搜索:
[term1, term2] - 搜索:
[term1, term2, term3]
关于如何实现这一点有什么建议吗?
我将以下事件侦听器附加到父框架,用于侦听事件iframeSearchSubmit。
event listener added to window on first page load
<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>
【问题讨论】:
标签: javascript iframe google-tag-manager addeventlistener