打印

BX9046: 各浏览器对 HTML 对象的 innerHTML 属性的读写支持存在差异

作者:陆远

标准参考

无。

问题描述

IE6 IE7 IE8 浏览器中对 APPLET、AREA、BR、COL、COLGROUP、FRAME、HEAD、HR、HTML、IFRAME、IMG、INPUT、ISINDEX、META、NOFRAMES、NOSCRIPT、OBJECT、PARAM、SCRIPT、STYLE、TABLE、TBODY、TFOOT、THEAD、TITLE、TR 元素设置 innerHTML 属性时会抛异常。其中 IE6 对 ABBR 元素设置 innerHTML 属性时也会抛异常。
Safari 对 AREA、BASE、BR、COL、COLGROUP、FRAME、FRAMESET、HEAD、HR、IMG、INPUT、ISINDEX、META、PARAM 对象设置 innerHTML 属性时会抛异常。

造成的影响

若对问题描述中的对象设置 innerHTML 属性,则可能在 IE、Safari 中抛出异常,导致代码停止运行。

受影响的浏览器

所有浏览器  

问题分析

MSDN 中描述对象的 innerHTML 方法为获取或设置对象起始和结束标签之间的 HTML 代码。
MDC 中描述对象的 innerHTML 方法为设置或获取元素子孙元素的 HTML 格式代码。

更多关于 innerHTML 方法的信息,参见 MSDN innerHTML Property 及 Mozilla Developer Center element.innerHTML 中的内容。
同时 innerHTML 方法已经成为 HTML5 草案的一部分,参见 3.5.5 innerHTML

测试代码:innerHTML.html1

注 1: 由于代码较多,正文不再贴出,具体代码参见 "测试页面"。

HTML4.01 规范中的元素对象的 innerHTML 方法设置权限情况在各浏览器中的运行效果如下:

  IE6 IE7 IE8 Safari Firefox Chrome Safari
ABBR1 未知的运行时错误 OK OK OK
APPLET NOFRAMES NOSCRIPT OBJECT SCRIPT STYLE TABLE TBODY TFOOT THEAD TR 未知的运行时错误 未知的运行时错误 OK OK
AREA BASE BASEFONT BR COL COLGROUP HR IMG INPUT ISINDEX META PARAM 未知的运行时错误 未知的运行时错误 NO_MODIFICATION_ALLOWED_ERR:
DOM Exception 7
OK
FRAME 对象不支持此属性或方法 对象不支持此属性或方法 NO_MODIFICATION_ALLOWED_ERR:
DOM Exception 7
OK
FRAMESET OK OK NO_MODIFICATION_ALLOWED_ERR:
DOM Exception 7
OK
IFRAME 对象不支持此属性或方法 对象不支持此属性或方法 OK OK
HTML TITLE 无法设置 innerHTML 属性。
该操作的目标元件无效。
无法设置 innerHTML 属性。
该操作的目标元件无效。
OK OK
HEAD 无法设置 innerHTML 属性。
该操作的目标元件无效。
无法设置 innerHTML 属性。
该操作的目标元件无效。
NO_MODIFICATION_ALLOWED_ERR:
DOM Exception 7
OK
其他 HTML 元素对象 OK OK OK OK
  • IE6 IE7 IE8 除 MSDN 上所列举的 CO、COLGROUP、FRAMESET、HEAD、HTML、STYLE、TABLE、TBODY、TFOOT、THEAD、TITLE、TR 这些元素的 innerHTML 属性是只读之外,上表中列举的其他一些 HTML 元素对象的 innerHTML 属性也为只读,无法对其进行设置操作,其中 IE6 对 ABBR 元素设置 innerHTML 属性时也会抛异常。
  • Safari 所有的自闭和元素及 FRAMESET、HEAD、COLGROUP 元素的 innerHTML 方法为只读。
  • Firefox Chrome Opera 所有 HTML 元素对象均可以设置其 innerHTML 属性,即 innerHTML 属性均为可读写。

注 1: 关于 ABBR 元素在 IE6 中的的怪异表现,本文不再单独分析,请参见相关问题。

解决方案

首先自闭和元素由于其不具备结束标签,所以其 innerHTML 方法本身并无意义。此外,某些浏览器针对一些特殊结构的元素取消了其 innerHTML 属性的设置权限。所以在为 HTML 元素对象设置其 innerHTML 属性时需格外注意,避免为可能抛出异常的元素设置其 innerHTML 属性。

参见

知识库

相关问题

测试环境

操作系统版本: Windows 7 Ultimate build 7600
浏览器版本: IE6
IE7
IE8
Firefox 3.6.10
Chrome 7.0.517.17 dev
Safari 5.0.2
Opera 10.62
测试页面: innerHTML.html
本文更新时间: 2010-10-09

关键字

innerHTML