打印

BT2022: 只有 IE 支持 OBJECT 元素的 onerror 事件

作者:陆远

标准参考

问题描述

onerror 事件不是 W3C 规范中的标准事件,且只有 IE 支持 OBJECT 元素的 onerror 事件。

造成的影响

若在 OBJECT 元素上使用 onerror 事件,则该事件只在 IE 中可能被触发。
如使用了 ActiveX,在其 OBJECT 元素上使用了 onerror 事件以便在 ActiveX 插件无法正常运行时显示错误提示信息,而由于非 IE 浏览器不支持此事件且也不支持 ActiveX 技术,则此时在这些浏览器中也无法显示出错误提示信息。如:

受影响的浏览器

IE6 IE7 IE8  

问题分析

W3C HTML4.01 规范第 18.2.3 节 介绍了 HTML 中的内在事件(Intrinsic events),其中并没有 onerror 事件。

onerror 事件为 IE 专有,可以作用于 INPUT、IMG、OBJECT、SCRIPT、STYLE 等元素,这些元素对象加载错误时将触发此事件。
更多参见 MSDN:onerror Event

分析以下代码:

<object classid="1" onerror="alert('err')"></object>

上面代码中 OBJECT 元素的 classid 属性设置了一个错误的 clsid 值,则仅在IE中 onerror 事件被触发,弹出了提示框,其他浏览器均没有任何反应。

解决方案

避免使用非标准的 onerror 事件。对于 OBJECT 元素可以通过对客户端浏览器类型进行判断,来达到有好地提示错误的效果。

参见

知识库

相关问题

测试环境

操作系统版本: Windows 7 Ultimate build 7600
浏览器版本: IE6
IE7
IE8
Firefox 3.6.3
Chrome 5.0.375.17 dev
Safari 4.0.5
Opera 10.51
测试页面: object_onerror.html
本文更新时间: 2010-07-16

关键字

OBJECT onerror event 错误 事件