我需要添加错误'所有图像的事件监听器。 但它应该使用window.HTMLImageElement(或通过window.HTMLImageElement.constructor,window.HTMLImageElement.prototype.constructor等)添加。
答案 0 :(得分:1)
不幸的是,the error
event doesn't bubble,所以你不能使用委托的处理程序。从该链接(步骤14中的最后一个“否则”):
图像数据以某种致命的方式被破坏,使得无法获得图像尺寸,或者图像数据不是支持的文件格式;用户代理必须将
img
元素设置为损坏状态,中止提取算法,丢弃该算法生成的任何待处理任务,然后将任务排队到名为error
的第一个fire a simple eventimg
元素,然后在loadend
元素处触发名为img
的简单事件。
“点燃简单事件”的地方说:
点击名为
e
的简单事件表示名为e
的受信任事件,不会冒泡(除非另有说明),且不可取消(必须在给定目标上创建和分派使用Event接口的地方。
(我的重点)
相反,您必须将处理程序挂钩到页面上的每个图像(您可以使用getElementsByTagName
或querySelectorAll
查找它们),小心检查图像是否已经完成(在这种情况下,事件可能已被解雇)。
答案 1 :(得分:-1)
您无法更改HTMLImageElement.prototype
以实现您的目标。
但是,您可以尝试使用addEventListener
检查图像错误。
window.addEventListener("error", function(e) {
if ( e.target && e.target.nodeName.toLowerCase() === 'img' ) {
console.log('image error');
}
}, true);
示例jsfiddle
总的来说,我会说改变任何原生对象的原型是个坏主意,因为随着代码库的增长,它可能会导致奇怪的副作用。