2011-02-22 59 views
0

我被給了這個JavaScript代碼片段在一個網站上實現。只是堅持它是行不通的。我覺得如果我能更好地理解這段代碼在做什麼,那麼我可以讓它工作。有人可以請大致解釋這段代碼在做什麼?謝謝!不知道這個JS代碼在做什麼

<script type="text/javascript"> 
var thisref = document.referrer.replace(/&/g, "zzzzz"); 
var ciJsHost = (("https:" == document.location.protocol) ? "https://" : "http://"); 
document.write(unescape("%3Cscript src='" + ciJsHost + "tracking.callmeasurement.com/clickx/click_matrix.cfm?munique=" + new Date().getTime() + "&prev=" + thisref + "' type='text/javascript'%3E%3C/script%3E")); 
</script> 
+0

_Just sticking it in not working._什麼不工作意味着什麼?某種原因「這就是她說的話」突然出現在我的腦海裏。 – epascarello 2011-02-22 17:33:37

+0

哈哈,謝謝。我剛剛在T.J.的文章中發表了一篇評論,解釋了它在做什麼。把它放在window.load中有一個問題。 – RyanPitts 2011-02-22 17:39:50

回答

8

第二行和第三行將script標記插入文檔中,以便加載腳本http://tracking.callmeasurement.com/clickx/click_matrix.cfm。如果頁面的協議是http,https如果是https,則它使用http。 (您可以丟棄該部分; more here。)它將頁面的引用作爲參數傳遞給加載腳本的GET(&替換爲zzzzz),並且還包含munique參數,該參數僅獲取當前日期的數字版本,作爲試圖擊敗緩存。

調用unescape和編碼字符的原因是,如果您在script標記中的JavaScript代碼中的字符串內有</script>,則會提前結束腳本標記。 (JavaScript代碼應該在其自己的文件中的幾個原因之一)。所以他們避免HTML解析器通過編碼括號來看</script>,並使用unescape來更新它們。


更新:下面你說你要使用該代碼在window.load。你不能那樣做,因爲你只能在最初的頁面解析期間使用document.write。 (如果您以後使用它,它會重新打開它清除它  —然後寫入新的空白文檔的文檔  —)

你可以,不過,後來通過其它機制(更新添加script標籤:對不起,錯過了你使用jQuery;在最底層是一個jQuery版本):

<script type="text/javascript"> 
window.onload = function() { 
    // Get the referrer, replacing `&` with `zzzzz` 
    var thisref = document.referrer.replace(/&/g, "zzzzz"); 

    // Get the protocol to use based on the current document's protocol 
    var ciJsHost = (("https:" == document.location.protocol) ? "https://" : "http://"); 

    // Create a script element, set its type and src 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = ciJsHost 
       + "tracking.callmeasurement.com/clickx/click_matrix.cfm?munique=" 
       + new Date().getTime() 
       + "&prev=" + thisref; 

    // Add it just about anywhere; `document.body` works fine and is 
    // easy. The script is downloaded and executed when you do the append. 
    document.body.appendChild(script); 
}; 
</script> 

或者,如果你想使用的伎倆I linked to above關於協議:

<script type="text/javascript"> 
window.onload = function() { 
    // Get the referrer, replacing `&` with `zzzzz` 
    var thisref = document.referrer.replace(/&/g, "zzzzz"); 

    // Create a script element, set its type and src 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = "//tracking.callmeasurement.com/clickx/click_matrix.cfm?munique=" 
       + new Date().getTime() 
       + "&prev=" + thisref; 

    // Add it just about anywhere; `document.body` works fine and is 
    // easy. The script is downloaded and executed when you do the append. 
    document.body.appendChild(script); 
}; 
</script> 

而你並不真的需要一個單獨的變量爲thisref部分;改變這種剝出上面的解釋是:

<script type="text/javascript"> 
window.onload = function() { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = "//tracking.callmeasurement.com/clickx/click_matrix.cfm?munique=" 
       + new Date().getTime() 
       + "&prev=" + document.referrer.replace(/&/g, "zzzzz"); 
    document.body.appendChild(script); 
}; 
</script> 

最後,我已經錯過了你使用jQuery,對不起「回合是:

<script type="text/javascript"> 
$(window).load(function() { 
    $("<scr" + "ipt type='text/javascript' src='//tracking.callmeasurement.com/clickx/click_matrix.cfm?munique=" 
     + new Date().getTime() 
     + "&prev=" + document.referrer.replace(/&/g, "zzzzz") + "'></src" + "ipt>") 
     .appendTo(document.body); 
}); 
</script> 

...儘管你可能會考慮jQuery(...而比$(window).load(...,除非你真的希望這等到所有的圖像和這樣的加載(也許你這樣做!)。

其實我更喜歡非jQuery的版本,使用jQuery甚至當,但人們的口味都不同......

2

它只是試圖從服務器加載腳本。它也發出一個虛假的引薦者信息。

1

首先,它munges引用頁的URL與「ZZZZZ」來代替&號。

接下來,它會判斷用於訪問當前頁面的協議是HTTP還是HTTPS。

最後,它會創建一個腳本標記,並將src元素設置爲跟蹤站點,並使用與用於訪問當前頁面的協議相同的協議(基於時間的唯一標識)爲修改後的引用者URL提供它。 。

簡而言之,它是通過跟蹤代碼來確定此頁面上的訪問者來自何處。