可以为'错误'添加事件监听器。事件到HTMLImageElement?

时间:2016-03-14 14:45:10

标签: javascript

我需要添加错误'所有图像的事件监听器。 但它应该使用window.HTMLImageElement(或通过window.HTMLImageElement.constructor,window.HTMLImageElement.prototype.constructor等)添加。

2 个答案:

答案 0 :(得分:1)

不幸的是,the error event doesn't bubble,所以你不能使用委托的处理程序。从该链接(步骤14中的最后一个“否则”):

  

图像数据以某种致命的方式被破坏,使得无法获得图像尺寸,或者图像数据不是支持的文件格式;用户代理必须将img元素设置为损坏状态,中止提取算法,丢弃该算法生成的任何待处理任务,然后将任务排队到名为error的第一个fire a simple event img元素,然后在loadend元素处触发名为img的简单事件。

“点燃简单事件”的地方说:

  

点击名为e的简单事件表示名为e的受信任事件,不会冒泡(除非另有说明),且不可取消(必须在给定目标上创建和分派使用Event接口的地方。

(我的重点)

相反,您必须将处理程序挂钩到页面上的每个图像(您可以使用getElementsByTagNamequerySelectorAll查找它们),小心检查图像是否已经完成(在这种情况下,事件可能已被解雇)。

答案 1 :(得分:-1)

您无法更改HTMLImageElement.prototype以实现您的目标。

但是,您可以尝试使用addEventListener检查图像错误。

window.addEventListener("error", function(e) {
    if ( e.target && e.target.nodeName.toLowerCase() === 'img' ) {
      console.log('image error');
    }
}, true);

示例jsfiddle

总的来说,我会说改变任何原生对象的原型是个坏主意,因为随着代码库的增长,它可能会导致奇怪的副作用。