JP, Depois de verificar sua solução, eu ainda estava tendo problemas no Firefox, onde ele não carregava as imagens antes de prosseguir com o carregamento da página. Eu descobri isso colocando alguns sleep(5)
no meu script do lado do servidor. Eu implementei a seguinte solução com base na sua, que parece resolver isso.
Basicamente, adicionei um retorno de chamada ao seu plugin de pré-carregamento do jQuery, para que ele seja chamado depois que todas as imagens forem carregadas corretamente.
// Helper function, used below.
// Usage: ['img1.jpg','img2.jpg'].remove('img1.jpg');
Array.prototype.remove = function(element) {
for (var i = 0; i < this.length; i++) {
if (this[i] == element) { this.splice(i,1); }
}
};
// Usage: $(['img1.jpg','img2.jpg']).preloadImages(function(){ ... });
// Callback function gets called after all images are preloaded
$.fn.preloadImages = function(callback) {
checklist = this.toArray();
this.each(function() {
$('<img>').attr({ src: this }).load(function() {
checklist.remove($(this).attr('src'));
if (checklist.length == 0) { callback(); }
});
});
};
Fora de interesse, no meu contexto, estou usando isso da seguinte maneira:
$.post('/submit_stuff', { id: 123 }, function(response) {
$([response.imgsrc1, response.imgsrc2]).preloadImages(function(){
// Update page with response data
});
});
Espero que isso ajude alguém que chega a esta página do Google (como eu) procurando uma solução para pré-carregar imagens nas chamadas do Ajax.
$.each(arguments,function(){(new Image).src=this});