我正在研究旧项目。其中document.all()
用于JavaScript。相同的命令在IE8,9,10中正常工作,但在IE11上不起作用。
我开始知道我们需要使用document.getElementById()
,但我需要更改近1000个JSP文件才能进行此更改。
请建议 - 有没有其他方法可以?
答案 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.length
或all.item(id)
。当前使用document.all
仍然需要考虑以确保垫片覆盖现有的用法;并且应该批量更新未涵盖的少数用法。
如果这样的垫片足够,它仍然需要注入所有“1000个JSP文件”;希望已有一个通用的脚本文件..
答案 1 :(得分:0)
强制IE11模拟IE10(我使用meta标签<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10"/>
document.all变得可用。