2016-07-04 15 views
5

Ho un codice JS nella mia app Rails che genera un evento di tracciamento su Mixpanel in una nuova sessione.Rails: Javascript per il monitoraggio delle sessioni che si attivano in modo incoerente

In teoria, prima che venga generato un altro evento, dovrei vedere prima l'evento "Nuova sessione". Ma in alcune visite, non vedo l'evento "Nuova sessione" che significa che non viene sparato in alcune occasioni.

Cosa c'è di sbagliato con il codice qui sotto?

$(function(){ 
    var currentLocation = window.location.hostname; 
    var lastLocation = document.referrer; 
    if (lastLocation.indexOf(currentLocation) > -1) { 
    } else { 
    mixpanel.track("New Session", {}); 
    } 
    mixpanel.track("Page View", {}); 
}); 
+0

stai usando i turbolinks nel tuo progetto? – neydroid

+1

reindirizza anche. Immagina che qualcuno visiti una pagina bloccata quando vengono disconnessi, il server li reindirizza alla pagina di accesso. il referrer verrebbe impostato sul tuo dominio e l'evento non verrebbe licenziato –

+0

@BlairAnderson Penso che sia effettivamente il problema. Esistono alcuni reindirizzamenti http https. Vuoi lasciare una risposta? –

risposta

4

Se stai usando Turbolinks l'evento ready non viene licenziato dopo la prima caricamento della pagina, quindi è necessario legare il costume turbolinks eventi come page:load come:

var ready; 
ready = function() { 
    var currentLocation = window.location.hostname; 
    var lastLocation = document.referrer; 
    if (lastLocation.indexOf(currentLocation) > -1) { 
    } else { 
    mixpanel.track("New Session", {}); 
    } 
    mixpanel.track("Page View", {}); 
}; 

$(document).ready(ready); 
$(document).on('page:load', ready); 

Per Rails 5 il nome dell'evento è stato modificato in turbolinks:load

+0

Grazie per la risposta, ma ho già disabilitato i turbolinks –

1

È necessario capire come riprodurre il problema prima di poter realmente risolvere il problema.

Sappiamo che il codice è in esecuzione, mi consiglia di utilizzare l'if-statement per il tracciamento e l'aggiunta di dati.

$(function(){ 
    var currentLocation = window.location.hostname; 
    var lastLocation = document.referrer; 
    if (lastLocation.indexOf(currentLocation) > -1) { 
    // internal links 
    mixpanel.track("Page View", {}); 
    } else { 
    // external or non-existant link 
    // bookmarks and email links won't have referrers 
    mixpanel.track("New Session", {referrer: document.referrer}); 
    mixpanel.track("Page View", {}); 
    } 
}) 
+0

Questo è un buon passo. Grazie, proverò e riporterò. –