11const ka = window . koko_analytics ;
2+ let tracked = false ;
23
34ka . trackPageview = function ( path , post_id ) {
45 if (
@@ -25,14 +26,29 @@ ka.trackPageview = function(path, post_id) {
2526 } ) ) ;
2627} ;
2728
28- // autotrack pageview on page load, but only if the page is visible (e.g. not in a background tab)
29- // we also track if the page becomes visible later (e.g. user switches to the tab), but only once per page load
30- let autotracked = false ;
31- const autotrack = ( ) => {
32- if ( ! autotracked && document . visibilityState === 'visible' ) {
33- ka . trackPageview ( ka . path , ka . post_id ) ;
34- autotracked = true ;
35- }
29+ function trackCurrentPageview ( ) {
30+ tracked = true ;
31+ ka . trackPageview ( ka . path , ka . post_id ) ;
32+ }
33+
34+ if (
35+ document . visibilityState === 'hidden' ||
36+ document . visibilityState === 'prerender'
37+ ) {
38+ // Track page as soon as it becomes visible
39+ document . addEventListener ( 'visibilitychange' , ( ) => {
40+ if ( ! tracked && document . visibilityState === 'visible' ) {
41+ trackCurrentPageview ( ) ;
42+ }
43+ } ) ;
44+ } else {
45+ // Otherwise, track page right away
46+ trackCurrentPageview ( ) ;
3647}
37- document . addEventListener ( "visibilitychange" , autotrack ) ;
38- window . addEventListener ( 'load' , autotrack ) ;
48+
49+ // Track pageviews for pages restored from bfcache
50+ window . addEventListener ( 'pageshow' , ( evt ) => {
51+ if ( evt . persisted ) {
52+ trackCurrentPageview ( ) ;
53+ }
54+ } ) ;
0 commit comments