需要爬别人网站的图片,对方的图片不太稳定,偶尔有加载不出来的问题发生。
由于爬虫执行顺序的原因,我也没办法给他的img加onerror进行监听,所以需要异步判断img是否加载错误。
本来以为很简单的一个需求,找了一下网上的资料,发现大部分都是各种对我没用的信息,什么用onload、onreadystatechange,还有说用complete就可以的。。。首先,如果我能加onload的话,干脆加onerror多省事。complete就更离谱了,图片即使加载失败,complete也是返回true的,严重怀疑文章作者写作之前有没有测试过。
搜索了大半天没什么收获,最后自己测试出来了,图片加载错误的时候naturalWidth和naturalHeight两个属性会返回0,所以拿来判断是否加载错误就很方便了。先用complete属性判断img是否就绪了,然后再判断naturalWidth和naturalHeight两个属性是否为0就可以了。
var imgobj=document.getElementById("Img");if (imgobj.complete){if(imgobj.naturalWidth==0 && imgobj.naturalHeight==0){//图片错误时候的处理}}