У меня такая же проблема, и я провел несколько тестов.
Я провел несколько тестов с iframes и добился определенного успеха.Протестировано на Firefox 3.6 и Chrome.Для тестов я использовал 9 изображений 15Mb .С предварительной загрузкой img я несколько раз убивал свой firefox (да, на этом компьютере не слишком много пометок), используя img действие «suspend» не предотвращает загрузку изображения, если запрос запущен, с помощью iframes действие suspend действительно останавливает загрузку (так как яудалите фрейм).Следующим шагом будет тестирование с XMLHttpRequests .Поскольку эта версия моего тестового кода использует поведение кэша Браузера, сформируйте URL-адрес изображения, чтобы предотвратить повторную загрузку, и это работает также с запросами ajax.Но, возможно, с помощью iframes я мог бы найти способ извлечения двоичных данных из загруженного изображения в iframe напрямую (с ограничением на те же URL-адреса домена).
Это мой тестовый код (очень быстрый на Chrome, может убить ваш 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');
});
});
});
edit и вот fillde для его проверки: http://jsfiddle.net/wPr3x/