2011-02-17 74 views
1

有人能解釋一下構成Google網站優化控制腳本的JavaScript嗎?具體來說:前兩行似乎是空函數,爲什麼第三個函數會包含圓括號()?谷歌網站優化控制Javascript

據我可以告訴這個腳本基本上寫出一個新的<script>,這可能會加載一些A/B測試。

function utmx_section(){} 
function utmx(){} 
(function() { 
    var k='0634742331',d=document,l=d.location,c=d.cookie; 
    function f(n) { 
     if(c) { 
     var i=c.indexOf(n+'='); 
     if (i>-1) { 
      var j=c.indexOf(';',i); 
      return escape(c.substring(i+n.length+1,j<0?c.length:j)) 
     } 
     } 
    } 
    var x=f('__utmx'),xx=f('__utmxx'),h=l.hash; 
    d.write('<sc'+'ript src="'+'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com'+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+'" type="text/javascript" charset="utf-8"></sc'+'ript>') 
    } 
)(); 

我試圖通過螢火蟲調試器,但它似乎並不喜歡它。任何見解都非常感謝。

非常感謝

回答

1

它首先縮短了裏面的文件名字和餅乾匿名函數內部,功能f(n)下名n得到的cookie值。然後谷歌讀取它的cookies,並在d.write的幫助下加載它的腳本(因爲我看到它們與谷歌分析有關)。通過這種方式,它使On-Demand JavaScript加載......實際上,您始終加載這些腳本,Google只需要url中的一些附加參數,所以這樣做是這樣完成的 - 將參數保存在cookie中,下次用於再次獲取腳本。

最後回到前兩個魔紋:)谷歌加載其腳本(執行d.write後)有它使用utmxutmx_section,以及這些功能定義,或者不如說壓倒一切的一些功能。我認爲它們一開始就是空的,只是因爲另一個函數可以在它的真實定義之前執行它,並且具有空函數什麼也不會發生(並且沒有JS錯誤),否則腳本將不起作用。例如。第一次迭代後有一些數據,這些數據用於對這些功能進行真正的定義,並且一切都開始工作:)

+0

感謝您的回答,非常有趣。 – 2011-02-18 09:34:55

1

前兩個函數實際上是空的,並且可能稍後會被覆蓋。
第三個功能是匿名自我執行功能。括號是一種慣例,使您意識到自我執行的事實。
「f」函數在文檔的cookie中查找賦予它的值並返回它。然後,將新的腳本標記寫入文檔(並從服務器請求),並將這些值作爲其URL的一部分。

+0

如果您嘗試刪除自執行功能周圍的括號,將會收到語法錯誤;他們被要求使其成爲一個有效的表達。 – Reid 2011-02-17 21:53:56