2010-05-13 45 views
2

這是比什麼都好奇的問題...雙script標籤跟蹤代碼

谷歌指示添加Analytics跟蹤代碼如下:

<script type="text/javascript"> 
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); 
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); 
</script> 
<script type="text/javascript"> 
    try{ 
     var pageTracker = _gat._getTracker("UA-xxxxxx-x"); 
     pageTracker._trackPageview(); 
    } catch(err) {} 
</script> 

我想知道一些JS大師在這裏可以告訴我爲什麼他們將它分成兩個腳本標記,而不是將它們全部粘在一個腳本標記中。我知道最上面的部分可以放在標題和body標籤前面的底部,以確保頁面在跟蹤之前加載,但是我想知道是否還有更多。任何知道如何將代碼分解成兩個標籤的人都會知道。

我只要求,因爲這是從goog到來,正在使用的數百萬個網站......

感謝

+1

只是通過評論。以異步方式加載Google Analytics有一個很酷的代碼片段:http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html – juandopazo 2010-05-14 00:41:07

+0

不錯,不知道他們有這個,謝謝 – Tom 2010-05-14 01:56:23

回答

3

這是要一致的跨瀏覽器,它需要確保document.write()堅持它的下一個腳本塊運行之前生成的標籤,所以結果看起來是這樣的:

<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script> 
<script type="text/javascript"> 
    try{ 
     var pageTracker = _gat._getTracker("UA-xxxxxx-x"); 
     pageTracker._trackPageview(); 
    } catch(err) {} 
</script> 

如果沒不會在2個腳本中執行,_gat在第二個腳本塊中未定義,因爲ga.js尚未加載...但是作爲之前的腳本塊那一個,頁面在最後一個塊內執行代碼之前等待,當它應該時,所有這些都可以工作。基本上,瀏覽器以的順序執行腳本塊,谷歌利用這個事實加載腳本,當它需要被加載...這是在它被使用之前。

+0

啊,有道理......一旦延遲消失,我會接受這個答案。謝謝。 – Tom 2010-05-14 00:04:59

1

如果我猜的話,我會說這是因爲document.write(unescape(...));的行他們動態地包括另一個JS文件。爲什麼他們動態加載那個我不知道。我想這與您是否運行https或http有關。

如果是一個文件,我懷疑ga.js文件將被加載以及時運行pageTracker代碼。 _gat將不存在,並且您會收到錯誤,而不是實際使用Google Analytics。

+0

有趣的想法..但是標籤的關閉和重新打開是否足以讓情況變得如此呢? – Tom 2010-05-14 00:02:44