Comments (5)
Thanks @igrigorik, I'll look into this.
from autotrack.
We've been doing this for all our SAP apps for google analytics.
(mainly based on your article @igrigorik ;)
We wrote a little service for it:
var
VisibilityStates = {
prerender: 'prerender'
,visible: 'visible'
,hidden: 'hidden'
}
,VisibilityState = VisibilityStates.visible // dont want to deal with prerender
,visibilityCallbacks = {
visible: []
,hidden: []
}
;
function onForeground(event) {
processVisibilityChange('visible', event)
}
function onBackground(event) {
processVisibilityChange('hidden', event)
}
function onVisibilityChange(event) {
processVisibilityChange(document.visibilityState, event)
}
function processVisibilityChange(newState, event) {
// console.log("VisibilityState: " + VisibilityState + ' -> ' + VisibilityStates[newState], event)
// ignore prerender
if (newState == 'prerender') return;
// ignore unless changed
if (VisibilityState == VisibilityStates[newState]) return;
// fire callbacks
VisibilityState = VisibilityStates[newState];
var i, cbs = visibilityCallbacks[newState];
for (i = 0; i < cbs.length; i++) { cbs[i].call(event) }
}
window.addEventListener("beforeunload", onBackground, false);
window.addEventListener("pagehide", onBackground, false);
window.addEventListener("pageshow", onForeground, false);
if (document.visibilityState) document.addEventListener("visibilitychange", onVisibilityChange, false);
So for GA, we would write:
visibilityCallbacks.visible.push(function(){
ga('set', 'page', window.location.href);
ga('send', 'pageview');
});
Obviously you can trim down on the service part, but I'm lazy.
I love that you guys are doing this, finally dont have to write our own custom SAP ga integration on every project 🎉
from autotrack.
Thanks @chaffeqa, there's a pageVisibility
tracker implementation in the 1.0 branch. In addition to tracking visibilitychange
events, it also tracks how long the user spent in each state, and it more gracefully handles session timeouts so you don't end up with a bunch of sessions that only contain visibilitychange
events.
You can follow the progress of 1.0 in PR #67.
from autotrack.
@chaffeqa nice, great work!
@philipwalton fwiw, it'd be great to have a writeup on the findings in your experiments.. to explain and motivate why folks should be using the visibility approach (within GA and other products). Perhaps something we can collaborate on post I/O?
from autotrack.
Fixed via 911e9f7.
@igrigorik agreed, now that 1.0 is out, I'll try to put something together promoting the new model.
from autotrack.
Related Issues (20)
- urlChangeTracker does not work HOT 1
- /
- hover event for eventTracker?
- Move dependencies to devDependencies HOT 1
- Is this the way to implement stepped scroll tracking?
- command not found: autotrack HOT 2
- cleanUrlTracker temperamental
- Twitter restablecer
- Support for VueJS and NuxtJS?
- Ecommerce Plugin
- hash tracker
- Library no longer maintained - what now? HOT 2
- Fff
- Send custom metrics with autotracking?
- Test
- Google analytics tracking doesn't require URL request to track a local R Shiny app HOT 1
- Failed to execute 'unobserve' on 'IntersectionObserver': parameter 1 is not of type 'Element'.
- Ahmed X
- Xx
- isssue
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from autotrack.