var prefix=function() { var prefixes = ['moz', 'ms', 'o', 'webkit']; if ('hidden' in document) { return ''; } // Loop through each prefix to see if it is supported. for (var i = 0; i < prefixes.length; i++) { var testPrefix = prefixes[i] + 'Hidden'; if (testPrefix in document) { return prefixes[i]; } } return; } var visibilityState = function(pref){ switch (pref) { case '': return document['hidden']; case 'moz': return document['mozHidden']; case 'o': return document['oHidden']; case 'webkit': return document['webkitHidden']; default: return; } } // Initialize time var startTime = new Date().getTime(); var totalTime = {}; if (typeof prefix() !== 'undefined') { var prevTime = 0; var visibilityEvent = prefix() + 'visibilitychange'; function visibilityChanged() { var isHidden=visibilityState(prefix()) if (typeof isHidden !== 'undefined') { prevTime = 0 ? new Date().getTime() - startTime : new Date().getTime() - startTime - prevTime; //Total Time for previous visibility state if(isHidden) { totalTime.visibleTime=prevTime} else {totalTime.hiddenTime=prevTime} } }; function sendTimings() { var isHidden=visibilityState(prefix()) if (typeof isHidden !== 'undefined') { prevTime = 0 ? new Date().getTime() - startTime : new Date().getTime() - startTime - prevTime; if(!isHidden) {totalTime.visibleTime=prevTime} else {totalTime.hiddenTime=prevTime} } ga('send', 'timing', { 'timingCategory': location.pathname, 'timingVar': 'Page Timings', 'timingValue': totalTime.visibleTime, 'timingLabel': 'Visible' }); //send hidden time hit ga('send', 'timing', { 'timingCategory': location.pathname, 'timingVar': 'Page Timings', 'timingValue': totalTime.hiddenTime, 'timingLabel': 'Hidden' }); // reset the variables after sending data to analytics prevTime=0; startTime = new Date().getTime(); totalTime = {} } //Initialize the listeners document.addEventListener(visibilityEvent, visibilityChanged, false); window.addEventListener('beforeunload', sendTimings, false); }