我强烈建议您使用回调来继续您的逻辑:
function isOnline(sURL, callbacks){
var bOnline,
oImage = document.body.appendChild( document.createElement("img") );
oImage.onerror = callbacks.error;
oImage.onload = callbacks.success;
oImage.src = sURL;
}
而不是这样的电话:
if(isOnline('some-src')) {
// good stuff
} else {
// bad stuff
}
您应该使用以下功能:
isOnline('some-src',{
success : function(){
// yey! image is online
},
error : function(){
// eerror loading image. boo :((
}
});
如果您仍想在不使用回调的情况下在某个时间点进行测试,则可以返回实际的图像对象并在其上固定一个ready
或error
标志:
function isOnline(sURL) {
var bOnline,
oImage = document.body.appendChild( document.createElement("img") );
oImage.ready = oImage.error = false;
oImage.onload = function(){
oImage.ready = true;
}
oImage.error= function(){
oImage.error = true;
}
oImage.src = sURL;
return oImage;
}
var img = isOnline('some-src');
// .. after some computing
if(img.ready) {
// yey image has loaded
} else if(img.error) {
// damn error :(
} else {
// still not loaded :-?
}