【问题标题】:Issues with Google Tag Manager's built in Click trigger and shadow-domClick trigger 和 shadow-dom 中内置的 Google Tag Manager 的问题
【发布时间】:2018-03-14 22:57:30
【问题描述】:
【问题讨论】:
标签:
google-tag-manager
shadow-dom
【解决方案1】:
理想情况下,GTM 会在内部解决此问题;在那之前,这是我想出的解决方案......
创建一个文档级点击监听器(就像 GTM 一样)并触发自定义点击事件,但数据来自原始事件目标(而不是重新定位的目标)。
因此,请侦听文档上的“点击”,然后使用 event.composedPath()[0] 或不支持composedPath 的浏览器的备用方法之一获取原始目标。我只是拼凑起来,查看不同的文档并在不同的浏览器中尝试,所以不确定它是否完美。
function getOriginalTarget(ev) {
if ('composedPath' in ev) return ev.composedPath()[0]; // Standard
else if ('path' in ev) return ev.path[0]; // Old Chrome
else if ('originalTarget' in ev) return ev.originalTarget; // Firefox
else if ('srcElement' in ev) return ev.srcElement; // Old IE & Safari
else return ev.target; // Fallback to normal target.
};
document.addEventListener('click', function (ev) {
var target = getOriginalTarget(ev);
dataLayer.push({
'event': 'MyClick', // some custom event
'targetId: target.id || '' // some custom data (from original target)
// etc...
});
}, false);
我最初考虑使用'event': 'gtm.click' 模拟 GTM 内置点击事件,但后来我得出结论,这可能不是最好的主意.. hacky,会导致需要过滤的重复事件,并且会混淆一个不知道发生了什么的人。虽然我认为可以使用内置的 GTM 变量,例如 'gtm.elementClasses': target.className || ''、'gtm.elementId': target.id || ''、'gtm.elementTarget': target.target || ''、'gtm.elementUrl': target.href || target.action || '' 等。