将 Web 应用程序升级为跨浏览器兼容的 Document.all 问题
Document.all issue for upgrading web application to be cross browser compatible
我正在为一个网站进行跨浏览器兼容性升级,遇到了一个非常有趣的问题。
当前的 JavaScript 使用 document.all("whatever").value
来访问隐藏输入、文本框、复选框等的值。
我读过一些文章和帖子,指出document.all("")
在Firefox/Chrome中不起作用,请使用document.getElementById("")
,因为这是所有浏览器的标准。
因此,我决定测试我们当前的网站并通过JavaScript进行调试,发现document.all
实际上是未定义的,无法提取它试图访问的值......很酷吧?
好吧,我写了一个简单的HTML页面只是为了对此进行简单的测试。 我创建了一个文本类型的输入并放置:
<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
实际上是否适用于现代浏览器,但不推荐? 我希望有人能对此有所了解,因为这种替换将需要更改大量代码。
是的。 这正是它的工作原理。
问题在于,某些旧版网页会测试 document.all 作为检查 IE 的一种方式。然后,JS代码有两个代码路径:一个用于IE,一个用于其他浏览器。然而,其他遗留页面使用 document.all 盲目地假设它只需要与 IE 一起使用,因为它是在 IE 是使用中非常流行的浏览器的时候创建的。
由于后面的页面只会在非IE浏览器中中断,这对这些浏览器的市场份额或声誉不利,因此他们实现了document.all()来应对它们。但是因为在前一种情况下,他们希望JS代码遵循非IE代码路径,对于document.all本身(以及其他几种类似的测试document.all存在的方式),它们返回"undefined"。
有关详细信息,请参阅 HTMLAllCollection 接口和 [[IsHTMLDDA]] 内部插槽
- document.write和document.innerHTML以及其他javascript问题之间有什么区别
- document.referrer存在问题
- 我的javascript函数有问题,我认为是document.getElementById('vodObj
- 将 Web 应用程序升级为跨浏览器兼容的 Document.all 问题
- document.onload() 奇怪的行为,很少有问题
- IE8中的javascript怪异,document.write问题
- 简单搜索结果页面:if/else 使用 localStorage 变量和 document.write 时出现问题
- 替换Document.write问题(我做了一些研究,但还是失败了)
- Javascript document.getElementById未打印到元素-奇怪的问题
- 流星模板助手&document.write问题
- document.write、onload和可变范围问题
- rails中document.getElementById("id").focus()的问题
- 关于$(document).bind()的问题
- JQuery $(document).ready()外部ad-script加载缓慢的问题
- IE7 excanvas——$(document).ready()和IE7产生问题
- document.getElementById().src音频问题
- document.write存在跨站点脚本问题
- 在 Document.write() 之后调用函数时出现问题
- 新手问题 关于 document.addEventListener('mousemove', function (e)
- Document.referrer问题,当请求不存在时;t来自链接