Document.all将Web应用程序升级为跨浏览器兼容的问题

时间:2013-10-31 21:10:47

标签: javascript html cross-browser w3c

我正在为网站进行跨浏览器兼容性升级,并遇到了一个非常有趣的问题。

当前的JavaScript使用document.all("whatever").value来访问隐藏输入,文本框,复选框等的值。

我已阅读文章和帖子,指出document.all("")无法在Firefox / Chrome中使用,请使用document.getElementById(""),因为这是所有浏览器的标准。

所以,我决定测试我们当前的网站并通过JavaScript进行调试,看到document.all实际上是 UNDEFINED ,并且无法提取它试图访问的值...很酷吗?

好吧,我写了一个简单的HTML页面,只做一个简单的测试。我创建了一个text类型的输入并放置:

    <input id="testinput" name="testinput" type="textbox" value="5" />

然后我的JavaScript调用如下:

    alert(document.all("testinput").value);

结果?每次浏览器都会在警报中显示该值。更有趣的是,当我调试JavaScript时,我输入了命令窗口(chrome)document.all,输出未定义......但document.all("testinput").value的输出为5.

我在这里缺少什么?

document.all实际上是否适用于现代浏览器,但不推荐使用?我希望有人可以对此有所了解,因为这种替换会导致许多代码被更改。

1 个答案:

答案 0 :(得分:1)

是。这正是它的工作原理。

问题是一些遗留网页测试document.all作为检查IE的方法。然后,JS代码有两个代码路径,一个用于IE,另一个用于其他浏览器。另一方面,其他遗留页面盲目地使用document.all,假设它只需要与IE一起工作,因为它是在IE使用时非常受欢迎的浏览器中创建的。

由于后面的页面只会在非IE浏览器中中断,这对于这些浏览器的市场份额或声誉不利,因此它们实现了document.all()以应对它们。但是因为在前一种情况下,他们希望JS代码遵循非IE代码路径,对于document.all本身(以及其他几种类似的方法来测试document.all的存在),它们返回“undefined”。

有关详细信息,请参阅http://www.w3.org/html/wg/drafts/html/master/obsolete.html#dom-document-all