2012-02-16 13 views
6

Korzystam z Google Analytics i przekierowuję po zakończeniu żądania analityki.JavaScript wykonuje się po google analytics

Używam tego kodu:

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-12345678-1']); 

_gaq.push(['_trackPageview']); 

_gaq.push(function() { 
    window.location.replace("myRedirectToUri"); 
}); 

To nie jest wykonane prawidłowo.

Przekierowanie jest wykonywane poprawnie (jako callback analityczny) w przeglądarce Firefox, ale nie w innych przeglądarkach (IE, Chrome, Safari), więc tracę dane analityczne.

W tej chwili ustawiłem limit czasu na 1 sekundę, ale to nie jest prawdziwe rozwiązanie.

Każda pomoc, jak wykonać to poprawnie?

+0

Zobacz http://stackoverflow.com/questions/8147065/google-analytics-async-events-tracking-callback –

+0

Czy próbowałeś użyć 'window.location.href = url' zamiast okna'. location.replace (url) '? – Eduardo

+0

To samo zachowanie z window.location.href = url :( – Amir

Odpowiedz

11

W tej chwili nie ma dobrego rozwiązania tego problemu. Najlepsze, co możesz zrobić, to dodać limit czasu, aby opóźnić przekierowanie. Obecnie nie ma połączenia zwrotnego z _trackPageview. Po zwrocie oznacza, że ​​rozpoczęło śledzenie, ale nie zostało zagwarantowane, że udało się zarejestrować odsłonę, dopóki nie zakończy się żądanie __utm.gif.

Limit czasu 1 sekundy może być zbyt duży. Zwykle utrzymuję limit czasu około 200-400 ms.

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 

_gaq.push(['_trackPageview']); 

_gaq.push(function() { 
    setTimeout(function(){ 
     window.location.href = newUrl; 
    }, 200); 
}); 

EDIT:

Minęły 2 lata od czasu, kiedy pierwotnie początkowo pisał tę odpowiedź i od tego czasu Google Analytics przebyła długą drogę.

Teraz jest właściwy sposób to zrobić:

var _gaq = _gaq || []; 

_gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 

_gaq.push(['_set','hitCallback',function(){ 
    window.location.href = newUrl; 
}]); 

_gaq.push(['_trackPageview']); 

A jeśli zostały przeniesione do Universal Analytics za pomocą analytics.js odpowiednikiem byłoby:

ga('create', 'UA-XXXXXXX-X') 

ga('send', 'pageview', { 
    'hitCallback': function() { 
    window.location.href = newUrl; 
    } 
}); 

EDIT 2

Oto dokładniejszy sposób, aby to zrobić, aby kod był wykonywany, nawet jeśli kod Google Analytics został zablokowany lub zmieniony przez rozszerzenie lub adBlocker.

var t = undefined; 

var myCode = function(){ 
    window.clearTimeout(t); 
    t = undefined; 
    window.location.href = newUrl; 

}; 

t = setTimeout(myCode, 3000); 

ga('create', 'UA-XXXXXXX-X') 

ga('send', 'pageview', { 
    'hitCallback': myCode 
}); 
+1

Uważaj, nie zadziała, jeśli ktoś ma AdBlock lub Ghostery na. Jeśli chcesz wykonać zmianę lokalizacji dla użytkowników AdBlock, użyj setTimeout bez popychając go do tablicy GA w funkcji. – DanFromGermany

Powiązane problemy