Temat: Skrypt GA - Czy ktoś by mnie mógł oświecić jak to działa ?
var _gaq = _gaq || [];
Do zmiennej lokalnej (var, zasięg bieżącego bloku oraz wszystkich zagnieżdżonych w nim) _gag wrzucamy wartość _gag (zmienna globalna, albo jakiś domknięcie?) lub pustą tablicę, jeśli ta nie istnieje.
Takie konstrukcje wykorzystuje się m.in. do tworzenia własnych przestrzeni nazw (zobacz np.
https://github.com/qcadoo/qcadoo/blob/master/qcadoo-vie..., linie 24-28)
_gaq.push(['_setAccount', 'UA-294535301-1']);
_gaq.push(['_trackPageview']);
Modyfikujemy naszą tablicę _gag, dodając na jej koniec elementy (w tym wypadku inne tablice)
https://developer.mozilla.org/en-US/docs/JavaScript/Ref...
A ta dziwna konstrukcja (funkcja w nawiasie, (function(..) {..})(..) lub (function(..) { .. }(..)) ) to IIFE - Immediately-Invoked Function Expression, tutaj jest to dość fajnie opisane:
http://benalman.com/news/2010/11/immediately-invoked-f...
Co się dzieje wewnątrz funkcji?
var ga = document.createElement('script');
Tworzony jest element (obiekt DOM) <script> i przypisywany do zmiennej ga. Użycie var ogranicza jej zasięg do bieżącego bloku oraz kolejnych zagnieżdżeń.
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Naszemu elementowi <script/> ustawiamy takie atrybuty jak: type, src (lokalizacja w której znajduje się skrypt JS) oraz async (
http://www.w3schools.com/html5/att_script_async.asp)
Nasza zmienna w tm momencie przechowuje następujący element:
<script type="text/javascript" async="true" src="..google-analytics.com/ga.js"></script>
var s = document.getElementsByTagName('script')[0];
Znajdujemy pierwsze wystąpienie elementu <script /> na stronie.
Zwróć uwagę, że w tej chwili nasz element jeszcze nie został umieszczony na stronie (w hierarchii DOM obiektu document).
Tutaj Pan Michał chyba nie do końca ma rację - skrypt zostanie dopisany tam gdzie występuje tag <script /> po raz pierwszy.
Jeśli Umieścisz sobie wszystkie skrypty na końcu <body>, nowy skrypt zostanie dodany wlasnie tam (jako pierwszy).
s.parentNode.insertBefore(ga, s);
Umieszczamy nasz nowo utworzony element <script /> przed znalezionym w poprzednim kroku elementem (dosłownie: weź pierwszy znaleziony el. <script> (s), przejdź do jego rodzica/el. w którym został on osadzony (.parentNode) i wstaw do niego ga przed elementem s (.insertBefore(ga, s))).
Więcej o tego typu technikach znajdziesz w sieci pod hasłem "JavaScript DOMscripting".
Zawartość IIFE zostanie "zewaluowana" w momencie parsowania ('wczytania' skryptu).
Mam nadzieję, że pomogłem.