2011-11-12 16 views
7

Mam aplikację mobilną html5, w której wszystko istnieje na jednej stronie i używam history.back/popstate/etc, aby zmienić zawartość strony (przez jQuery Mobile). Używam Google Analytics do śledzenia różnych zdarzeń, a na jednej stronie śledzić jeśli wychodzi użytkownika za pośrednictwem konkretnego przycisku:Google Analytics zakłóca działanie history.back() w przeglądarce Androida?

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

W Android 2.2 przeglądarki history.back() jest wywoływana ale onpopstate nie jest zwolniony a strona nie jest zmieniona. Jeśli wstawię window.onpopstate = function() { alert("!"); }; tuż przed history.back(), nie widzę alertu.

Jeśli odwrócę dwie linie (history.back() najpierw, to _gaq.push), wydaje się działać, ale nie mogę polegać na tym rodzaju porządkowania w całym kodzie.

Nie są zgłaszane żadne wyjątki. Działa dobrze w iOS i na komputerze.

Wszelkie pomysły, dlaczego funkcja history.back() nie działa po wywołaniu google analytics?

+0

Mam dokładnie ten sam problem. Nie przypuszczam, że wymyśliłeś rozwiązanie lub obejście problemu od czasu pierwszego ogłoszenia w tym miesiącu, prawda? – Trott

+0

Nie znalazłem obejścia, przepraszam. W końcu przestaliśmy używać Google Analytics i unikamy umieszczania kodu w pobliżu history.back(). – DurhamG

+0

Nie mogę specjalnie pamiętać o tym samym problemie, ale przeglądając JavaScript dla aplikacji HTML5, którą zbudowałem (półtora roku temu), deleguję połączenia do Google Analytics za pośrednictwem funkcji, którą właśnie nazywam na końcu innych funkcji/wywołania, które tego potrzebują. – cchana

Odpowiedz

1

Hm, okej, naprawdę paskudny: co się stanie, jeśli otoczysz _gaq.push() nową funkcją i opuścisz history.go() tam, gdzie jest?

1

Być może połączenie z google analytics dodaje nowy wpis do stosu historii, a history.back() po prostu przenosi cię na stronę, na której jesteś w tej chwili.

Lub GA daje nowy zakres historii.

Spróbuj zadzwonić history.back() dwukrotnie lub użyj top.history.back() lub window.history.back() lub self.history.back()

2

Spróbuj zawijania wywołanie _ gaq.push() w sposób Timeout asynchroniczny z 0:

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

pozwoli history.back() wykonać zanim Google Analytics potencjalnie wpływa historii stos.

+0

To działa dla mnie, bardzo ładnie. Czy @DurhamG może potwierdzić, czy to też działa dla niego? Wtedy przyznam ci bonus. – RTB

Powiązane problemy