IE9显示错误complete
属性,其中包含以下内容:
$("<img/>",{src:"http://farm2.static.flickr.com/1104/1434841504_edc671e65c.jpg"}).each(function(){console.log(this.complete);});
如果您在浏览器控制台中运行此代码,(允许足够的时间加载图像),请再次运行它。 IE9是我测试过的唯一一个第二次显示false的浏览器。这似乎是一个已知的错误,从一些简单的谷歌搜索。 我需要一个解决方法,如果有人有。
这可能是一个时间问题,因为让上面的代码设置一个全局变量la:
var img = $("<img....
然后测试该变量的属性会得到不同的结果:
img[0].complete === true
和
img[0].readyState === "complete"
必须有其他方式来获取此信息。任何想法......谢谢!
答案 0 :(得分:2)
我用这个:
function doWhenLoaded(obj,callback) {
if($.browser.msie) {
var src=$(obj).attr("src");
$(obj).attr("src","");
$(obj).attr("src",src);
}
$(obj).one("load",callback).each(function(){
// alert(this.readyState+" "+this.src);
if(
this.complete
|| this.readyState == "complete"
|| this.readyState == 4
|| ($.browser.msie && parseInt($.browser.version) == 6)
) {
$(this).trigger("load");
}
});
}
样本:
doWhenLoaded("#main_background_img",function(){
$("#main_background_img").slideDown(1000);
});
答案 1 :(得分:0)
这就是我通常预装图像的方式:
var img = new Image();
$(img).attr('src', "foo.jpg");
if (img.complete || img.readyState === 4) {
// image is cached
alert("the image was cached!");
} else {
$(img).load(function() {
// image was not cached, but done loading
alert("the image was not cached, but it is done loading.");
});
}
我没有在IE9中对它进行过深度调试,但我没有遇到任何问题。
代码是从https://github.com/tentonaxe/jQuery-preloadImages/blob/master/jquery.preloadimages.js提取并修改的。
答案 2 :(得分:0)
您可以在图像上尝试AJAX请求并查看状态代码。如果它是304则意味着图像被缓存。不知道这会有多好。也许AJAX会破坏缓存。
答案 3 :(得分:0)
我知道这是在一百万年前被问过的,但我想我会提供类似的解决方案,但是开销和i / o都很少。
基本上,您创建了一个自定义jQuery方法,该方法在一个函数中执行类似的功能:
$.fn.imgLoad = function(callback) {
return this.each(function() {
if(callback){
if(this.complete || (this.readyState === 4) || (this.readyState === 'complete')) {
callback.apply(this);
} else {
$(this).one('load.imgCallback', function(){
callback.apply(this);
});
}
}
});
}
这将所有可能事件的检查合并为一个(缓存和未缓存),但也使该方法可链接。您可以使用以下方式调用它:
$('img').imgLoad(function(){
console.log('loaded');
});
跨浏览器工作,回到IE6。请注意,它首先检查缓存,如果不是,则只触发一次命名空间加载事件,以防止在使用该逻辑调用该函数两次时重新加载,而且还允许绑定自定义加载事件(如果适用)。
答案 4 :(得分:-2)
您无法判断它是否已缓存,但您可以通过“腌制”来强制进行新的加载。文件名:
src:"http://farm2.static.flickr.com/1104/1434841504_edc671e65c.jpg?"+new Date()