【发布时间】:2013-08-19 06:18:15
【问题描述】:
我有一个函数,我将 img src 值作为参数,我想做的是检查该图像加载时是否出现 200 ok 或 404/其他错误。如果它得到 200 ok,那么我想将带有该 src 的 img 标签注入到 DOM 中(我认为在检查期间,它也会被加载到浏览器缓存中,并将该 img 标签注入 DOM 会从缓存中加载它) .我尝试了一个简单的 sn-p 代码,如下所示:
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;
}
它在 chrome 中运行良好,但在 firefox 和 ie 中运行良好(无论图像加载正常还是损坏,它们都只触发错误事件)。我没有使用 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,然后把它交给这个函数来检查它们是否应该被注入到 DOM 中,结果证明 FF 在我没有删除的 bg-url 中包含了一组额外的“”(双引号),并且因此它们导致错误事件总是被触发。似乎最基本的img.onload,img.onerror按预期工作,感谢您的所有帮助:)
标签: javascript jquery image onload onerror