【问题标题】:Detect whether Image is broken in Javascript检测图像是否在 Javascript 中损坏
【发布时间】:2012-08-31 17:04:48
【问题描述】:

我正在使用 Javascript 将图像添加到 HTML5 画布:

img = new Image(); 
img.addEventListener('load', loadCallBack, false);
img.src = image_url;

然后loadCallBack 绘制图像。

问题在于,有时image_url 指的是损坏的或不存在的图像。发生这种情况时,我在控制台中收到 404 错误,并且画布上的图像保持白色。相反,我希望能够用另一个image_url 替换图像的src 属性。

我尝试了以下方法,但没有成功:

img.addEventListener("error", function(){console.log("404");});

如何检测图像的 404?

注意:我仍在寻找解决方案,因为到目前为止发布的两个都没有奏效。

【问题讨论】:

  • error 事件似乎有效(至少在 Chrome 中):jsfiddle.net/qgJRF
  • 我已经编辑了标题; Image() javascript 类早在 HTML5 之前就已经存在(澄清)。既然你提到了画布,我就把你的问题留下了 HTML5 标记。
  • 但是听起来像这个问题:stackoverflow.com/questions/92720/…

标签: javascript image html canvas


【解决方案1】:

在 jQuery 中为我工作...http://jsfiddle.net/5v2qG/

img = new Image(); 
$(img).bind('error', function () {
      alert('error called');                                                
});
img.src = "invalid_img_name.png";​

【讨论】:

  • 我正在考虑让您的任何一个解决方案都能正常工作,谢谢。
  • @LonelyWebCrawler 你在使用 jQuery 吗?只要您在尝试加载图像 src 之前附加 .bind() 事件处理程序,它就应该可以工作。
  • 啊,我的顺序错了。奇怪的是,控制台仍然吐出 404 消息,但错误函数被调用。谢谢!
  • 很抱歉删除您接受的答案,但这并没有按我的预期工作。我会调查的。
  • jsfiddle.net/5v2qG/2 为我工作。警报没有弹出一个有效的图像 url...
【解决方案2】:

与 Kostia 的答案相同的代码:只是为了比较 jQuery 的丑陋和 vanilla javascript 的美丽:

function brokenImage() { ... }

img = new Image();
img.onerror = brokenImage;
img.src = "invalid_img_name.png";​

【讨论】:

  • 请记住,直接分配给 onerror 处理程序将覆盖可能分配的任何其他错误事件处理程序。对于简单的情况可能不是问题 - 但大多数时候最好使用 img.addEventListener("error"... - 虽然你必须使用 addEventListener 处理所有跨浏览器问题。
  • 由于 MrSpeaker 的评论获得了如此多的支持,因此必须强调它是错误的:对 onerror 属性的关注在我们不拥有的对象中是有意义的(例如页面上共享的 HTMLElement它所有的javascript代码)。在这里,我们拥有img 对象,所以我们可以随意使用它来做我们想做的事情,而且没关系。 “大多数时候它更好......” - 这不是争论,只是模糊的感觉。实际上,评论是社交潮流反模式的一个很好的例子。
猜你喜欢
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 2021-07-28
相关资源
最近更新 更多