是否可以使用“;document.all”;在IE11中,而不改变每次使用

Is it possible to use "document.all" in IE11 without changing every usage?

本文关键字:改变 可以使 document all 是否 IE11      更新时间:2023-09-26

我正在处理旧项目。其中document.all()用于JavaScript。相同的命令在IE8、9、10中运行良好,但在IE11上不起作用。

我知道我们需要使用document.getElementById(),但为了这个更改,我需要更改近1000个JSP文件。

请建议-是否有其他选择使其成为可能

可以在IE11/Edge中使用document.all(id)document.all[id],至少当站点具有HTML4 doctype以及相关兼容性功能时是这样。它似乎也在E11/Edge&HTML5;YMMV。

也就是说,即使它"不再受支持"-并且甚至被标记为已删除(因此YMMV在"兼容性"模式之外)-它仍然在IE11中实现。Windows XP"不再受支持",但它仍在继续使用,并且运行得一如既往。。别介意它是一艘废弃的船。(文档暗示只有HTML5 doctype触发了绿色区域行为;尽管我无法观察到声称的效果。)

由于这是一个"老项目",最简单的解决方案是不理会它,根据需要触发IE"兼容模式";无论如何,可能还有许多其他过时的方法。也就是说,让这个网站成为HTML4,毕竟这是一个"老项目"。

虽然我最初在评论中建议"匀场"1,但由于几个原因,所需的属性/对象存在问题,并且不能像RobG指出的那样模拟all[id]形式。此外,这样的填充程序实际上不会更新代码以使用批准的方法——这只是一个谎言,与最初删除它的原因背道而驰。

因此,如果希望更改不推荐使用的/obsolution用法,正确的解决方案修改"1000个JSP文件"。通过一点分析,这应该是可能的,主要是自动化的全局替换,然后是diff/delta代码审查。


1FWIW,最基本的填充程序,假设在IE11中重新分配到document.all是可能的,其中document.all被全部删除,将类似于:

if (!document.all) {
   document.all = document.getElementById;
}

这将允许document.all(someId),但不允许all(name)all[id]all.lengthall.item(id)。仍然需要查看document.all的当前用法,以确保垫片覆盖了现有用法;并且应该大规模更新未涵盖的少数用途。

如果这样的填充程序就足够了,那么它仍然需要被注入到所有的"1000个JSP文件"中;希望已经有了一个通用的脚本文件。。

通过强制IE11模拟IE10(我使用了元标记<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10"/>文档。所有文档都可用。

jsbin