有没有办法确定图像路径是否会导致实际图像,即检测到图像无法在Javascript中加载.
对于Web应用程序,我正在解析xml文件并从图像路径列表中动态创建HTML图像.服务器上可能不再存在某些映像路径,因此我希望通过检测哪些映像无法加载并删除该HTML img元素来优雅地失败.
注意JQuery解决方案无法使用(老板不想使用JQuery,是的,我知道不要让我开始).我知道在JQuery中检测图像何时加载的方法,但不知道它是否失败.
我的代码创建img元素,但我如何检测img路径是否导致无法加载图像?
var imgObj = new Image(); // document.createElement("img");
imgObj.src = src;
Run Code Online (Sandbox Code Playgroud) 我将所有*.jpg文件视为静态,但我需要动态地提供一些.我可以简单地省略扩展名,这样我就不必对我的网址规则感到满意吗?仅在标题中设置文件类型是否足够?
<img>加载错误可能有不同的原因,例如网络错误响应,图像数据错误......
error收到的对象onerror似乎没有说明确切的原因.
有没有办法知道错误是由于网络错误,比如说HTTP 500还是网络超时?
编辑:
我不是在寻找一种加载资源的替代方法,例如AJAX请求.我需要专门针对事件<img>标记的答案onerror.原因是我正在使用这种方法进行像素跟踪,我需要一种方法来重试网络错误.我也没有寻找其他跟踪方法,如JSONP.
我只是在setTimeout回调中设置后才尝试返回变量.我想不出有任何其他方法可以做到这一点,但这是我的尝试(我知道代码似乎很愚蠢,但它是解决Cordova错误).由于我理解的原因,它导致无限循环.
function isConnected() {
var done = false;
setTimeout(function() {
done = true;
}, 500);
while (!done) {}
return navigator.connection.type!== Connection.NONE;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释为什么会发生这种情况,或提供替代方案吗?
更新(解决方案):
function isConnected(callback) {
setTimeout(function() {
callback(navigator.connection.type !== Connection.NONE);
}, 500);
}
isConnected(function(connected) {
if (!connected)
alert('Not Connected');
});
Run Code Online (Sandbox Code Playgroud)