diff options
author | Peter Zhang <waikatozhang@gmail.com> | 2021-09-22 08:48:59 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-22 08:48:59 +0300 |
commit | e39f2ee65befc883dac4c06b0232f4ead485ac74 (patch) | |
tree | 161277daa58787929f149d89a954b0853d1b86c4 /js/piwik.js | |
parent | 0adaea428ed8b8b83f08c645ecba3eed4938e2fa (diff) |
add heartbeat ping tab tracking (#18028)
Diffstat (limited to 'js/piwik.js')
-rw-r--r-- | js/piwik.js | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/js/piwik.js b/js/piwik.js index 500d003094..e280517eb2 100644 --- a/js/piwik.js +++ b/js/piwik.js @@ -112,7 +112,7 @@ "", "\b", "\t", "\n", "\f", "\r", "\"", "\\", apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, lastIndex, length, parse, prototype, push, replace, sort, slice, stringify, test, toJSON, toString, valueOf, objectToJSON, addTracker, removeAllAsyncTrackersButFirst, - optUserOut, forgetUserOptOut, isUserOptedOut, withCredentials + optUserOut, forgetUserOptOut, isUserOptedOut, withCredentials, visibilityState */ /*global _paq:true */ /*members push */ @@ -2894,6 +2894,14 @@ if (typeof window.Matomo !== 'object') { } } + function heartBeatOnVisible() { + if (documentAlias.visibilityState === 'hidden' && hadWindowMinimalFocusToConsiderViewed()) { + heartBeatPingIfActivityAlias(); + } else if (documentAlias.visibilityState === 'visible') { + timeWindowLastFocused = new Date().getTime(); + } + } + /* * Setup event handlers and timeout for initial heart beat. */ @@ -2908,6 +2916,7 @@ if (typeof window.Matomo !== 'object') { addEventListener(windowAlias, 'focus', heartBeatOnFocus); addEventListener(windowAlias, 'blur', heartBeatOnBlur); + addEventListener(windowAlias, 'visibilitychange', heartBeatOnVisible); // when using multiple trackers then we need to add this event for each tracker coreHeartBeatCounter++; @@ -6267,9 +6276,11 @@ if (typeof window.Matomo !== 'object') { if (windowAlias.removeEventListener) { windowAlias.removeEventListener('focus', heartBeatOnFocus); windowAlias.removeEventListener('blur', heartBeatOnBlur); + windowAlias.removeEventListener('visibilitychange', heartBeatOnVisible); } else if (windowAlias.detachEvent) { windowAlias.detachEvent('onfocus', heartBeatOnFocus); windowAlias.detachEvent('onblur', heartBeatOnBlur); + windowAlias.removeEventListener('visibilitychange', heartBeatOnVisible); } } |