Perfection or Vanity

Project: Terminated

Blog nie jest już dalej prowadzony ani aktualizowany. Mimo tego, wpisy i komentarze są dalej dostępne. Możesz przeczytać pożegnalny wpis albo przejść do archiwum.

Od dłuższego czasu korzystam z tych statystyk i sprawują się świetnie. Problemem było dla mnie ładowanie się zewnętrznego pliku .js, który potrafił zablokować stronę, jeśli serwer nie odpowiadał. Rozwiązaniem doraźnym było przemieścić kod z head na dół body. Nie uważałem tego za dobre wyjście.

Całe szczęście Rafał Lindemann wpadł na rozwiązanie, które chciałem zaprezentować większemu gronu - jest o wiele bardziej przemyślane. Całość dotyczy nie tylko sposobu wklejania kodu, ale też przechwytywania danych z dynamicznych URL-i. Wracając jednak - chodzi o to, że używamy funkcji, która doda odpowiedni element <script/> do bloku <head/> po załadowaniu się strony (czy innym zdarzeniu, zależy od Twojego kodu):

  1. function addGoogleStats() {
  2. var GAID = 'UA-xxxxxx-x'; //twój identyfikator GA
  3. var head = document.getElementsByTagName('head')[0];
  4. var scr = document.createElement('script');
  5. scr.type = 'text/javascript';
  6. scr.src = (location.protocol == 'http:' ? 'http://www.' : 'https://ssl.') + 'google-analytics.com/'+'urchin.js';
  7. var once = 0;
  8. function runMe() {
  9. if (scr.readyState == 'loading' || urchinTracker == undefined || once) { return; }
  10. clearInterval(timer);
  11. once++;
  12. _uacct = GAID;
  13. urchinTracker();
  14. }
  15. var timer = setInterval(runMe, 3000);
  16. scr['onload'] = runMe;
  17. scr['onreadystatechange'] = runMe;
  18. head.appendChild(scr);
  19. }

Taki kod może sobie leżeć spokojnie w zewnętrznym pliku JavaScript, funkcja addGoogleStats() wywołana na życzenie (window.onload albo addEventy). Dołączony w ten sposób kod może na początku nie sygnalizować serwerowi, że serwis został podłączony - ale dane i tak będą zbierane.

Można także dodać sobie nowe wyszukiwarki rozpoznawane przez system statystyk. Przed urchinTracker():

  1. _uOsr[_uOsr.length]="onet.pl"; _uOkw[_uOkw.length]="qt";
  2. _uOsr[_uOsr.length++]="wp.pl"; _uOkw[_uOkw.length++]="szukaj";
  3. _uOsr[_uOsr.length++]="netsprint.pl"; _uOkw[_uOkw.length++]="q";

Michał Górny napisał nowszą wersję kodu zalecanego od niedawna przez Google Analytics.

Informacje i hiperłącza

Blog o projektowaniu zgodnych ze standardami stron internetowych.

Praktyczne przykłady, sztuczki CSS, sposoby obchodzenia błędów przeglądarek, lekki i nieinwazyjny JavaScript, użyteczny design, dostępność i skrypty użytkownika.

RSS

Informacje o wpisie

Napisał riddle 21 maja 2006 o 18:34

Kategorie: JavaScript & DOM, Narzędzia

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

Dzięki!

Dodaj bloga do Technorati Favorites Dodaj bloga do Del.icio.us Blog należy do sieci 10przykazań.com

  1. Szkoda, ze GA nie pokazuje pelnych IP (subdomen) odwiedzajacych... Ograniczenie postaci *.foo.TLD boli i IMHO przekresla uzywanie wylacznie tego systemu statystyk (nie ma to jak stary, dobry access.log).

    Co do dodatkowych wyszukiwarek -- sprawdziles czy Google pozwala na zmiane kodu statystyk? (AFAIR bardzo ostro traktowali naruszenia kodu AdSense -- mozna bylo tworzyc dodatkowe, ale niestety nieoficjalne, wymiary boksow reklamowych). Regulamin przede wszystkim ;-)

  2. Można, można… https://www.google.com/support/analytics/bin/answer.py?answer=27286 :)

  3. Fajne, fajne, ale i tak pod pingwinem to nie wygląda, o czym pisałem w ostatniej notce.

  4. Hmm, chyba należy zwiększać _uOsr.length o jeden… poprawię we wpisie.

  5. Dzięki naprawde przydatne. :)

  6. Wcale nie trzeba tego pakować do eventa, czy onload, wręcz się nie powinno. Skrypt sam się tam pakuje. Wystarczy wywołać tę f-cję w dowolnym miejscu kodu - zarówno na początku jak i na końcu.

    Sama podepnie się pod onload, onreadystatechange, a jak przeglądarka nie odpali żadnego z nich - uruchomi się sam po 3 sekundach.

    W międzyczasie zacznie się już ładować JS z google'a - jeżeli nie będzie dostępny - nie powinien zakłócać w tej formie ładowania całej strony.

    Wywołując tą f-cję z onLoad powodujecie, że statystyka zostanie naliczona zawsze dopiero po minimum 3 sekundach od załadowania strony.

  7. Uch… nie miałem o tym pojęcia. Dzięki… pewnie teraz skoczy mi visits/pageviews. ;)

  8. Mi dzięki Twojemu linkowi już skoczyły :P

  9. Analizując statystyki firmowe GridwiseTech robię to za pomocą analytics i dodatkowo awstats. Mamy kilkadziesiąt do kilkuset wejść przez linki ze stron Sun Microsystems zanotowanych w awstats.

    W google analytics cisza!! Nie ma tych linków. Nie mam pewności czy nie pokazuje że dany użytjownik przyszedł z stron Sun ale rejestruje go jako direct entry czy wogole go nie rejesteruje.

    Założe się, że z firmami z którymi googiel ma nie podrodze może być podobnie.

  10. MPukacz 10 24 maja 2006, 21:16

    Hmmm, cos po tych usprawnieniach wogole statystyk niezbiera google. :/

  11. A wywołałeś addGoogleStats() gdzieś w dokumencie?

  12. Tylko czy ten skrypt zadziała pod IE bo mam co do tego wiele wątpliwości.

  13. A czemu by nie miał? Aktualne statystyki pokazują, że bloga z IE odwiedziło w ostatnim tygodniu 18.87% gości (co napawa mnie dodatkowo dumą :D).

  14. [Riddle]: „Hmm, chyba należy zwiększać _uOsr.length o jeden… poprawię we wpisie.”

    Oj chyba nie.
    Ile na początku masz elementów? 20 (licząc od zera) więc indeks ostatniego jest 19.
    Więc jak dodasz element z indeksem 20 to jest ok.
    To ile masz teraz elementów 21 (ostatni z indeksem 20), i tak dalej i tak dalej …

    Wniosek: usuń ++
    Podstawy programowania :P

Dodaj komentarz

Do formatowania komentarzy używaj Textile (HTML nie działa). Szczególnie jeśli wklejasz większe fragmenty kodu. W razie niepewności użyj podglądu komentarza.

Wypowiedzi obraźliwe, infantylne oraz nie na temat będą moderowane – pisząc postaraj się zwiększyć wartość dyskusji.

Komentarze nie służą do wysyłania wiadomości albo informowania o błędach, itd. Chcesz coś mi napisać – skontaktuj się.