我實際上有同樣的問題,並做了一些測試。
我已經做了一些測試iframes並取得了一些成功。經過Firefox 3.6和Chrome測試。對於我使用的9個15Mb的圖像。有了img預加載,我多次殺死了我的firefox(是的,在這臺計算機上沒有太多的記憶),使用img「暫停」動作並不會阻止圖像加載,如果請求已經開始,iframes暫停動作真的會停止下載(如我刪除iframe)。下一步將用XMLHttpRequests進行測試。由於我的測試代碼的這個版本正在使用圖片url的braowser緩存行爲來防止第二次加載,並且這也適用於ajax請求。但也許與iframe我可以找到一種方法來從iframe中直接加載的圖像中檢索二進制數據(限制在相同的域名url)。
這是我的測試代碼(非常快的瀏覽器,可太多的非常大的圖像殺死你的Firefox):
// jQuery.imageload.shared.list contains an array of oversized images url
jQuery.each(imglist,function(i,imgsrc) {
name = 'imageload-frame';
id = name + "-" + i;
// with img it is not possible to suspend, the get is performed even after remove
//var loader = jQuery('<img />').attr('name', name).attr('id',id);
var loader = jQuery('<iframe />').attr('name', name).attr('id',id);
//no cache on GET query taken from jQuery core
// as we really want to download each image for these tests
var ts = +new Date;
// try replacing _= if it is there
var ret = imgsrc.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
// if nothing was replaced, add timestamp to the end
imgsrc = imgsrc + ((ret == imgsrc) ? (imgsrc.match(/\?/) ? "&" : "?") + "_=" + ts : "");
loader.css('display', 'none').appendTo('body');
loader.after(jQuery('<a>')
.text(' stop ')
.attr('href','#')
.click(function(){
loader.remove();
jQuery(this).text(' suspended ');
})
);
// start the load - preload
loader.attr('src',imgsrc);
// when preload is done we provide a way to get img in document
loader.load(function() {
jQuery(this).next("a:first")
.text(" retrieve ").unbind('click')
.click(function() {
var finalimg = jQuery('<img />');
// browser cache should help us now
// but there's maybe a way to get it direclty from the iframe
finalimg.attr('src',loader[0].src);
finalimg.appendTo('body');
});
});
});
編輯,這裏是fillde來測試它:http://jsfiddle.net/wPr3x/
警惕't.src =''`,該規範模糊了應該發生的事情。見http://www.nczonline.net/blog/2009/11/30/empty-image-src-can-destroy-your-site/ – 2011-02-07 20:55:39
正確...一些瀏覽器正在請求網頁的網址(或base url)試圖用`src =''`加載圖像。在Firefox下,設置`t.src = null`也會取消請求,但是對其他人不做任何處理。較新的(當前工作)規範說(在某些情況下)[應該引發錯誤](http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1 .html#update-the-image-data)... kindof。 – Amir 2011-02-07 23:01:43
在Firefox中將`src`設置爲嵌入式圖像也會取消以前的請求:`t.src ='data:image/gif; base64,R0lGOD ...`在[this fiddle]中看到它(http:// jsfiddle。 net/amirshim/F4HbT/21 /) – Amir 2011-02-07 23:16:47