圖片Ping


前面的話

  在CORS出現以前,要實現跨域Ajax通信頗費一些周折。開發人員想出了一些辦法,利用DOM中能夠執行跨域清求的功能,在不依賴XHR對象的情況下也能發送某種請求。雖然CORS技術已經無處不在,但開發人員自己發明的這些技術仍然被廣泛使用,畢競這樣不需要修改服務器端代碼。本文將詳細介紹圖像Ping

 

基礎

  圖像Ping跨域請求技術是使用<img>標簽。一個網頁可以從任何網頁中加載圖像,不用擔心跨域不跨域。這也是在線廣告跟蹤瀏覽量的主要方式。也可以動態地創建圖像,使用它們的onload和onerror事件處理程序來確定是否接收到了響應

  動態創建圖像經常用於圖像Ping:圖像Ping是與服務器進行簡單、單向的跨域通信的一種方式。 請求的數據是通過査詢字符串形式發送的,而響應可以是任意內容,但通常是像素圖或204響應。通過圖像Ping,瀏覽器得不到任何具體的數據,但通過偵聽load和error事件,它能知道響應是什么時候接收到的

var img = new Image();
img.onload = img.onerror = function(){
    alert("Done!");
};
img.src = "test.html?sum=a";

  這里創建了一個Image的實例,然后將onload和onerror事件處理程序指定為同一個函數。這樣無論是什么響應,只要請求完成,就能得到通知。請求從設置src屬性那一刻開始,而這個例子在請求中發送了一個sum參數

 

示例

  圖像Ping最常用於跟蹤用戶點擊頁面或動態廣告曝光次數。圖像Ping有兩個主要的缺點,一是只能發送GET請求,二是無法訪問服務器的響應文本。因此,圖像Ping只能用於瀏覽器與服務器間的單向通信

  下面是一個圖片Ping的示例

<input id="btn" type="button" value="跨域請求">
<div id="result"></div>
<script>
var add = (function(){
    var counter = 0;
    return function(){
        return ++counter;
    }
})();
btn.onclick = function(){
    var sum = add();
    var img = result.getElementsByTagName('img')[0];
    if(!img){
        var img = new Image();        
    }
    img.height="100";
    img.onload = img.onerror = function(){
        result.appendChild(img);
        var oSpan = document.getElementById('sum');
        if(!oSpan){
            oSpan = document.createElement('span');
            oSpan.id="sum";
        }
        oSpan.innerHTML = '發送請求的次數:' + sum;
        result.appendChild(oSpan);
    };    
    if(sum%2){
        img.src = "http://7xpdkf.com1.z0.glb.clouddn.com/eg_bulboff.gif?sum="+sum;    
    }else{
        img.src = "http://7xpdkf.com1.z0.glb.clouddn.com/eg_bulbon.gif?sum="+sum;    
    }
}
</script>    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM