2012-02-16 3 views
6

Я использую Google Analytics и делаю перенаправление после завершения запроса аналитики.Выполнение JavaScript после Google Analytics

Я использую этот код:

var _gaq = _gaq || []; 

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

_gaq.push(['_trackPageview']); 

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

Это не выполняется правильно.

Перенаправление выполняется правильно (как обратный вызов аналитики) в Firefox, но не в других браузерах (IE, Chrome, Safari), поэтому я теряю данные аналитики.

На данный момент я установил тайм-аут 1 с, но это не настоящее решение.

Любая помощь в реализации этого правильно?

+0

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

+0

Вы пробовали использовать 'window.location.href = url' вместо' окна. location.replace (url) '? – Eduardo

+0

То же поведение с окном.location.href = url :( – Amir

ответ

11

Прямо сейчас нет хорошего решения этой проблемы. Лучшее, что вы можете сделать, это добавить таймаут для задержки перенаправления. В настоящее время нет обратного вызова в _trackPageview. Когда он возвращается, это означает, что он начал отслеживание, но не гарантирует, что он успешно зарегистрировал просмотр страницы до тех пор, пока запрос __utm.gif не будет завершен.

1 sec таймаут может быть слишком большим. Я обычно сохраняю тайм-аут около 200-400 мс.

var _gaq = _gaq || []; 

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

_gaq.push(['_trackPageview']); 

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

EDIT:

Это было 2 года, так как я первоначально первоначально отправил этот ответ, и с тех пор Google Analytics прошла долгий путь.

Теперь есть правильный способ сделать это:

var _gaq = _gaq || []; 

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

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

_gaq.push(['_trackPageview']); 

И если вы перешли на Universal Analytics с помощью analytics.js эквивалент будет:

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

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

EDIT 2

Вот более правильный способ сделать это, чтобы убедиться, что ваш код выполняется, даже если код Google Analytics заблокирован или взломан с помощью расширения или 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

Будьте осторожны, он НЕ будет работать, если у кого-то есть AdBlock или Ghostery. Если вы хотите выполнить изменение местоположения для пользователей AdBlock, используйте setTimeout, не нажимая его в массив ga в функции. – DanFromGermany

Смежные вопросы