Я думаю, что у меня есть: когда DOM загружен (или даже на событии window.load
- в конце концов, вы хотите сделать это, когда все образы настолько полны, насколько они собираются получить), выможете задним числом проверить, что с изображениями все в порядке, создав один новый элемент img
, перехватив его события load
и error
, а затем переключившись на src
с каждого из ваших выстрелов в голову.Что-то вроде кода ниже ( живой пример ).Этот код был просто выделен, это не качество производства - например, вам, вероятно, понадобится тайм-аут, после которого, если вы не получили ни load
, ни error
, вы допускаете ошибку.(Вам, вероятно, придется заменить свое изображение контролера для надежной обработки.)
Этот метод предполагает, что повторное использование src
не не перезагружает изображение, что, я думаю, довольнонадежное предположение (это, безусловно, легко тестируемый один), потому что этот метод использовался для предварительного кэширования изображений навсегда.
Я тестировал нижеприведенное на Chrome, Firefox и Opera для Linux кака также IE6 (да, действительно) и IE8 для Windows.Работал угощение.
jQuery(function($) {
var imgs, checker, index, start;
// Obviously, adjust this selector to match just your headshots
imgs = $('img');
if (imgs.length > 0) {
// Create the checker, hide it, and append it
checker = $("<img>").hide().appendTo(document.body);
// Hook it up
checker.load(imageLoaded).error(imageFailed);
// Start our loop
index = 0;
display("Verifying");
start = now();
verify();
}
function now() {
return +new Date();
}
function verify() {
if (!imgs || index >= imgs.length) {
display("Done verifying, total time = " + (now() - start) + "ms");
checker.remove();
checker = undefined;
return;
}
checker[0].src = imgs[index].src;
}
function imageLoaded() {
display("Image " + index + " loaded successfully");
++index;
verify();
}
function imageFailed() {
display("Image " + index + " failed");
++index;
verify();
}
function display(msg) {
$("<p>" + now() + ": " + msg + "</p>").appendTo(document.body);
}
});
Живой пример