我有一个函数,其中我得到的img src值作为参数,我想要做的是检查该图像是否加载了200或404 /一些其他错误。如果它获得了200的好处,那么我想要将一个带有该src的img标签注入到DOM中(我的理由是,在检查过程中,它也会被加载到浏览器缓存中,并将该img标签注入DOM从缓存中加载它) 。我试图用一个简单的代码片断如下:在javascript中检测img加载
function checkImage(src)
{
var img = new Image(),
tag = '<img src="'+src+'" />',
alt = '<span>sorry,image broken</span>';
img.onload = function(){
$('.some-container').html(tag);
};
img.onerror = function(){
$('.some-container').html(alt);
};
img.src = src;
}
它在铬工作得很好,但在Firefox和IE(两者都发射仅错误事件无论图像是否加载罚款或破去了Havok )。而不是使用的onload和onerror的,我尝试过使用jQuery,如:
$(img).load(...).error(...).attr('src',url);
$(img).on('load',...).on('error',...).attr('src',url);
$('<img />').load(...).error(...).attr('src',url);
$('<img />').on('load',...).on('error',...).attr('src',url);
,甚至试图通过desandro(https://github.com/desandro/imagesloaded)的jquery.imagesLoaded插件,如:
$(img).imagesLoaded().done(...).fail(...);
$(img).imagesLoaded().progress(function(instance,image){
image.isLoaded?alert('loaded'):alert('broken');
});
$('<img />').imagesLoaded().done(...).fail(...).attr('src',url);
$('<img />').imagesLoaded().progress(function(instance,image){
image.isLoaded?alert('loaded'):alert('broken');
});
我也尝试从解决方案:
jQuery callback on image load (even when the image is cached)
https://groups.google.com/forum/#!topic/jquery-dev/7uarey2lDh8
但事实证明,在Chrome中工作,但不是在FF或IE中,是否有任何解决方案可以检查存在于内存中但不在“DOM”中的映像?提前致谢。
经过严格检查,我发现了img的原因。onload并没有被解雇,结果我给了错误的url,除了这个函数之外,我从DOM中提取了background-urls,然后给了这个函数来检查它们是否应该被注入到DOM中,或者不,事实证明,FF icnludes一个额外的“”(双引号)在bg-url我没有删除,因此他们导致错误事件总是被触发。似乎最基本的img.onload,img.onerror按预期工作,感谢所有帮助你的人:) – somedev