是否可以使用" document.all"在IE11中没有改变每一种用法?

时间:2015-04-03 04:44:02

标签: javascript internet-explorer

我正在研究旧项目。其中document.all()用于JavaScript。相同的命令在IE8,9,10中正常工作,但在IE11上不起作用。

我开始知道我们需要使用document.getElementById(),但我需要更改近1000个JSP文件才能进行此更改。

请建议 - 有没有其他方法可以

2 个答案:

答案 0 :(得分:4)

可以在IE11 / Edge中使用document.all(id)document.all[id] - 至少在网站具有HTML4 doctype时,可能还有相关的兼容性功能。它似乎也适用于E11 / Edge& amp; HTML5;最后一次配置的YMMV。

即使它是"no longer supported" - even marked as removed(因此YMMV超出'兼容性'模式) - 它仍然实现在IE11中。 Windows XP“不再受支持”,但它继续被使用,并且仍然像以前一样运行..更别说它是一艘废弃的船。 (该文档仅提到触发绿色字段行为的HTML5文档类型;虽然我无法观察声明的效果。)

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

虽然我最初在评论中建议'shimming' 1 ,但由于多种原因,所需的属性/对象存在问题,而all[id]形式无法像RobG所指出的那样进行模拟。此外,这样的垫片实际上不会更新代码以使用已批准的方法 - 它只是一个谎言,并且与之为止的原因相反。

因此,如果希望更改已弃用/绝对使用,则正确的解决方案 以修改“1000个JSP文件”。通过一些分析,这应该可以通过大多数自动化的全局替换,然后进行diff / delta代码审查。


1 FWIW,最基本的垫片,假设在IE11-where-document.all-is-really-removed中可以重新分配给document.all,就像这样:

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

这将允许document.all(someId) all(name)all[id]all.lengthall.item(id)。当前使用document.all仍然需要考虑以确保垫片覆盖现有的用法;并且应该批量更新未涵盖的少数用法。

如果这样的垫片足够,它仍然需要注入所有“1000个JSP文件”;希望已有一个通用的脚本文件..

答案 1 :(得分:0)

强制IE11模拟IE10(我使用meta标签<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10"/> document.all变得可用。

jsbin