2013-04-02 16 views
10

Czy mogę wysłać zdarzenie Google Analytics i od razu odejść, tak?Wysyłanie zdarzenia Google Analytics, a następnie natychmiastowe opuszczenie strony

_gaq.push(['_trackEvent', 'foobar']); 
window.location = "/"; 

Jeśli Google Analytics wykona pewnego rodzaju żądanie AJAX, gdy zostanie to wywołane, powinno działać, niezależnie od tego, czy pozostaniemy na tej stronie, czy nie. Obawiam się, że czasami może to być umieszczanie rzeczy w tablicy w celu późniejszego przetworzenia. Myślę, że to się dzieje tylko na początku, gdy Google Analytics nie zdążyło jeszcze zostać zainicjalizowane, ale chciałbym być tego pewien.

Zrobiłem test z debugowaniem GA, i wydawało się, że zadziałało, ale nie jestem pewien, czy to oznacza, że ​​zawsze będzie zależało od prędkości ładowania, a co nie.

Czy mogę to zrobić i nigdy nie stracić żadnych wydarzeń?

Odpowiedz

7

Sposób Zrobiłem to tak:

_gaq.push(['_trackEvent', '...', '...', '...']); 
_gaq.push(function(){ 
    // do stuff here 
}); 

$('#logo').on('click', function(){ 
    var curPage = window.location.href; 
    _gaq.push(['_trackEvent', curPage, '#logo']); 
    _gaq.push(function(){ 
     window.location.href = '/'; 
    }); 
}); 

Drugie połączenie Push będzie zawsze uruchamiane po pierwszej, bo Google kolejek wszystkie naciskać połączeń, tak, że pierwszy z nich będzie działać i kompletne , , następnie drugi będzie działał i kompletował. Google pozwala umieszczać funkcje w metodzie push, dzięki czemu możesz je umieścić w kolejce.

Źródło: https://developers.google.com/analytics/devguides/collection/gajs/#PushingFunctions

+0

Dokładnie tego, czego szukałem. Dzięki! –

+0

Pamiętaj, aby wykonać wiele testów, próbując tego.Tylko dlatego, że połączenie _trackEvent _gaq.push powróciło, nie oznacza, że ​​dane zostały zapisane. Wewnętrznie do wysłania danych używane jest asynchroniczne żądanie obrazu, a użytkownik jest zależny od etapu, na jakim znajduje się żądanie, kiedy strona zostanie zerwana dla nowej strony. – mike

+0

Pomyślałem, że jeśli _gaq.push() rzeczywiście wysłał żądanie, nie ma znaczenia, czy zrobiłem to zaraz po - ponieważ po wysłaniu żądania przeglądarka nie musi robić nic innego, prawda? Chyba że wystąpił błąd podczas wysyłania śledzenia, ale i tak prawdopodobnie zostanie ono zerwane, niezależnie od tego, czy zostałem przekierowany, czy nie. –

0

Wygląda na to, że Twoja troska o utratę wydarzenia jest uzasadniona, zobacz this question. One answer wydaje się trochę niestabilna, jeśli chodzi o zmianę kodu Google, ale pozwoliłaby Ci potwierdzić śledzenie zdarzeń przed przejściem do linku. To byłoby prawdopodobnie "bliskie natychmiastowe".

5

dodaję niewielkie opóźnienie (przez setTimeout) jeżeli nowa strona nie jest otwierana w nowym oknie.

Nie miałem jeszcze okazji tego wypróbować, ale nowa funkcja Google Universal Analytics ma funkcję hitCallback, która jest wykonywana po wysłaniu danych.

+0

Wow, to jest doskonałe i wykonane dokładnie w tym celu. Wielkie dzięki za link! –

1

@mike wspomina hitCallback metodę, która jest opisana w dokumentacji analytics.js:

W niektórych przypadkach, jak podczas śledzenia linków wychodzących, warto wiedzieć, kiedy tracker odbywa wysyłania danych. W ten sposób możesz wysłać użytkownika do miejsca docelowego dopiero po zgłoszeniu jego kliknięcia do Google Analytics. Aby rozwiązać ten problem, polecenie send umożliwia określenie funkcji hitCallback w obiekcie nazwy pola, która zostanie wykonana, gdy tylko analytics.js zakończy wysyłanie danych.

co jest fantastyczne, z wyjątkiem fragmentu jest nadal w publicznej wersji beta. Jeśli z jakiegoś powodu (ahem polityki technofobiczna ahem) jesteś ograniczony do funkcjonalności ga.js można użyć this workaround:

_gaq.push(['_set', 'hitCallback', function(){ 
    document.location='someOtherPage.html'; 
}]); 
_gaq.push(['_trackEvent', 'category', 'event', 'value']); 

Innym rozsądna propozycja jest mieć zapasowe mieć wywołania zwrotnego wykonywane natychmiast jeśli _gaq nie jest zdefiniowany.

Powiązane problemy