7

Tengo una aplicación móvil html5 donde todo existe en una sola página y uso history.back/popstate/etc para cambiar el contenido de la página (a través de jQuery Mobile). Estoy usando Google Analytics para realizar un seguimiento de varios eventos y en una sola página que realizar un seguimiento de si el usuario sale a través de un botón en particular:Google Analytics interfiere con history.back() en el navegador android?

$('#my-back-button').bind('tap', function() { 
    _gaq.push(['_trackEvent', 'mycategory', 'myaction']); 
    history.back(); 
    return false; 
}); 

En el androide 2.2 history.back navegador() se llama, pero no se dispara onpopstate y la página no se cambia Si pongo window.onpopstate = function() { alert("!"); }; justo antes del histórico.back(), no veo ninguna alerta.

Si invierto las dos líneas (history.back() primero, luego _gaq.push), parece que funciona, pero no puedo confiar en este tipo de ordenamiento a lo largo de mi código.

No se emitieron excepciones. Funciona bien en iOS y en el escritorio de Chrome.

¿Alguna idea de por qué history.back() no funciona después de una llamada de Google Analytics?

+0

Estoy teniendo exactamente el mismo problema. No creo que hayas encontrado una solución o una solución desde la primera publicación hace meses, ¿o sí? – Trott

+0

No encontré una solución lo siento. Finalmente dejamos de usar Google Analytics, y evitamos poner código cerca de history.back(). – DurhamG

+0

No puedo recordar específicamente tener el mismo problema, pero mirando a través del JavaScript de una aplicación HTML5 que construí (hace año y medio ahora), delegué llamadas a Google Analytics a través de una función que acabo de llamar al final de otras funciones/llamadas que lo necesitan – cchana

Respuesta

1

Hm, bien, realmente desagradable: ¿qué ocurre si envuelves _gaq.push() en una nueva función y dejas history.go() justo donde está?

1

Tal vez la llamada a google analytics agrega una nueva entrada a la pila de historial y history.back() simplemente lo lleva a la página que se encuentra en este momento.

O GA le da un nuevo alcance a la historia.

Trate de llamar history.back() dos veces o utilizar top.history.back() o window.history.back() o self.history.back()

2

trate de envolver la llamada a _ gaq.push() en una asíncrono de tiempo de espera de 0:

$('#my-back-button').bind('tap', function() { 
    setTimeout(function() { 
     _gaq.push(['_trackEvent', 'mycategory', 'myaction']); 
    }, 0); 
    history.back(); 
    return false; 
}); 

Esto permitirá history.back() a ejecutar en primer lugar antes de que Google Analytics afecta potencialmente a la pila de la historia.

+0

Esto funciona para mí, muy bien. ¿Puede @DurhamG confirmar si esto también funciona para él? Entonces te daré el bonus. – RTB

Cuestiones relacionadas