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
});
Zobacz http://stackoverflow.com/questions/8147065/google-analytics-async-events-tracking-callback –
Czy próbowałeś użyć 'window.location.href = url' zamiast okna'. location.replace (url) '? – Eduardo
To samo zachowanie z window.location.href = url :( – Amir