打印

BX9025: 新版本的浏览器都已经不支持古老的 document.layers

作者:武利剑

标准参考

问题描述

document.layers 属性是古老的 Netscape 浏览器私有的,这个浏览器早已被淘汰,新版本的浏览器都已经不兼容他的私有属性值。

造成的影响

  1. 浏览器判断此属性诞生之后,经常和 doucment.all 共同用来判断浏览器类型,用来区分 Netscape 浏览器和 IE 浏览器,进而写出兼容 IE 和 NetScape 的代码。所以,容易出问题的都是较早实现的网站,这些网站用 document.layers 判断 Netscape 浏览器,对 NetScape 浏览器进行特殊的设置。现在 document.layers 已经不起作用,所以在所有浏览器中,针对 NetScape 浏览器做的设置就不会执行,造成跟 IE 浏览器的差异。
  2. 获取元素 document.layers 是一个元素的集合,所以,较早的网站中有利用 document.layers 获取元素的做法,所以在现代浏览器中,此段代码不会再起作用并且会报错。

受影响的浏览器

所有浏览器  

问题分析

document.layers 属性是从 JavaScript 1.2 开始引入的,从 Netscape 4.x 开始专有的属性。

它是一个代表所有由拥有定位属性元素的集合。通常是用 DIV 或 其专有的 LAYER 对象的 id 属性值来获得元素引用,但是这里面不包含除此以外的其它元素。

Netscape 6.0 以后放弃了 layers 特征。 现在所有浏览器都已经不再支持。

分析以下代码:

<script type="text/javascript">
  window.onload = function() {
    document.getElementById('info').innerHTML = document.layers;
  }
</script>
<div id="info"></div>

上述代码可以将 document.layers 对象输出到 ID 为 info 的 DIV 标记的文本节点中。
所有浏览器中都输出了:undefined,可见,所有浏览器都已经不再支持这个属性。

解决方案

  1. 用其他方式判断浏览器类型,避免使用 document.layers 属性;
  2. 利用 getElementById() 函数获取元素 。

参见

知识库

相关问题

测试环境

操作系统版本: Windows 7 Ultimate build 7600
浏览器版本: IE6
IE7
IE8
Firefox 3.6.2
Safari 4.0.4
Chrome 5.0.375.7 dev
Opera 10.51
测试页面: document_layers.html
本文更新时间: 2010-07-15

关键字

document layers Netscape