2012-03-02 15 views

Respuesta

18

EDITAR: Tenga en cuenta que este ya no es el caso. Ver el comentario a continuación.

Defundos jquery-pjax en realidad lo manejará de manera predeterminada (para google analytics al menos). Básicamente, cada vez que se invoca una carga de página pjax, le indica al objeto gaq que registre la nueva página.

El código que utiliza para hacerlo es así:

// Google Analytics support 
if ((options.replace || options.push) && window._gaq) 
_gaq.push(['_trackPageview']) 
+8

Esto ya no es cierto a partir de [este compromiso] (https://github.com/defunkt/jquery-pjax/commit/d1ed57262a1ada5fdeeafc56b6df1b54029c5acc). Ahora necesita usar eventos para manejar el seguimiento usted mismo. Se puede encontrar un ejemplo sobre cómo hacer esto usando YUI [aquí] (http://yuilibrary.com/yui/docs/pjax/#adding-analytics-support), y puede servir como una guía sobre cómo implementarlo. con jquery-pjax. –

2

Leer _trackPageview este http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html y http://code.google.com/apis/analytics/docs/tracking/asyncMigrationExamples.html

Google Analytics es una función para su uso en sitios supervisados ​​ga.js. que le permite realizar un seguimiento de eventos en su sitio que no generan una visita de página. Usando _trackPageview JavaScript, puede asignar un nombre de archivo de página específico a eventos Flash, eventos JavaScript, descargas de archivos, enlaces salientes y más, como este _gaq.push(['_trackPageview', '/home/landingPage']);

En la solicitud exitosa de ajax solo necesita decirle a GA la 'URL' de la página'.

+0

Gracias, voy a echar un vistazo a eso! – chopi321

+1

Al igual que un aviso, aunque el código anterior es correcto, el script "jquery-pjax" ya incluye código para mantener Google Analytics actualizado. Poner su propia llamada también podría terminar con páginas que se registran dos veces. – Carl

39

La respuesta aceptada ya no es válida porque como comentó Ruy Díaz, este fue retirado de PJAX in this commit.

Aquí está mi solución. En el evento pjax: end, configure la ubicación de GA y envíe una vista de página.

El evento pjax: end se utiliza porque se activa "al seguir un enlace pjaxed" (carga desde el servidor) y "en la navegación hacia atrás/adelante" (carga desde la memoria caché). Ver pjax events documentation

$(document).on('pjax:end', function() { 
    ga('set', 'location', window.location.href); 
    ga('send', 'pageview'); 
}); 

O utilizando la versión antigua del GA

$(document).on('pjax:end', function() { 
    if(window._gaq) { 
     _gaq.push(['_trackPageview', window.location.href]); 
    } 
}); 

tuve que ajustar manualmente la variable de ubicación, ya que no estaba captando que cambió.

+2

Esto funciona para la nueva versión. ¡¡Gracias!! – joehand

+0

Perrrrfect! ¡Gracias! – Brainfeeder

+0

Probablemente debería usar 'pjax: end'; de lo contrario, solo se realiza un seguimiento de las cargas de la primera página. –

1

Uso PJAX para cargas de páginas superiores a toda la página y cada carga de página puede generar varias solicitudes PJAX.

Para trabajar en el sitio de forma segura, presento un evento solo cuando cambia la URL. Esto no captura las actualizaciones, pero es mejor que enviar 3 x visitas por carga de página.

href = window.location.href; 

if (window.LAST_GOOGLE_ANALYTICS_LOCATION !== href) { 
    window.LAST_GOOGLE_ANALYTICS_LOCATION = href; 
    ga('set', 'location', href); 
    ga('send', 'pageview'); 
    console.log("Analytics: sending hit, this is a new url: " + href); 
} else { 
    console.log("Analytics: not sending hit; same url as before: " + href); 
} 
1

La respuesta de @andrewtweber es casi correcta, pero pjax:complete se activa sólo después de carga de la página, no en las páginas restauradas (por ejemplo, navegar usando botón de retroceso).

Así, el evento que se debe utilizar es pjax:end:

$(document).on('pjax:end', function() { 
    ga('send', 'pageview', window.location.href); 
}); 

o cuando se utiliza la versión legado de Google Analytics:

$(document).on('pjax:end', function() { 
    _gaq.push(['_trackPageview', window.location.href]); 
}); 
0

ubicación.href no funcionó para mí, estoy usando:

ga('send', 'pageview', location.pathname + location.search + location.hash);