Skip to content

Commit c20aede

Browse files
authored
Merge pull request #4248 from anvme/fix/tracker-bugs
fix(tracker): track clicks on annotated containers + handle invalid pushState URLs
2 parents aa9b6c0 + dcf1b8b commit c20aede

1 file changed

Lines changed: 11 additions & 13 deletions

File tree

src/tracker/index.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
}
9090

9191
currentRef = currentUrl;
92-
currentUrl = normalize(new URL(url, location.href).toString());
92+
currentUrl = normalize(url);
9393

9494
if (currentUrl !== currentRef && autoPageview) {
9595
setTimeout(track, delayDuration);
@@ -100,8 +100,9 @@
100100
const hook = (_this, method, callback) => {
101101
const orig = _this[method];
102102
return (...args) => {
103+
const result = orig.apply(_this, args);
103104
callback.apply(null, args);
104-
return orig.apply(_this, args);
105+
return result;
105106
};
106107
};
107108

@@ -123,31 +124,28 @@
123124
return track(eventName, eventData);
124125
}
125126
};
126-
const onClick = async e => {
127+
const onClick = e => {
127128
const el = e.target;
128-
const parentElement = el.closest('a,button');
129-
if (!parentElement) return trackElement(el);
129+
const eventEl = el.closest(`[${eventNameAttribute}]`);
130+
if (!eventEl) return;
130131

131-
const { href, target } = parentElement;
132-
if (!parentElement.getAttribute(eventNameAttribute)) return;
133-
134-
if (parentElement.tagName === 'BUTTON') {
135-
return trackElement(parentElement);
136-
}
137-
if (parentElement.tagName === 'A' && href) {
132+
if (eventEl.tagName === 'A' && eventEl.href) {
133+
const { href, target } = eventEl;
138134
const external =
139135
target === '_blank' ||
140136
e.ctrlKey ||
141137
e.shiftKey ||
142138
e.metaKey ||
143139
(e.button && e.button === 1);
144140
if (!external) e.preventDefault();
145-
return trackElement(parentElement).then(() => {
141+
return trackElement(eventEl).then(() => {
146142
if (!external) {
147143
(target === '_top' ? top.location : location).href = href;
148144
}
149145
});
150146
}
147+
148+
return trackElement(eventEl);
151149
};
152150
document.addEventListener('click', onClick, true);
153151
};

0 commit comments

Comments
 (0)