javascript - 是否可以在 IE11 中使用 "document.all"而不更改每个用法?

标签 javascript internet-explorer

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

我发现我们需要使用 document.getElementById(),但我需要为此更改近 1000 个 JSP 文件。

请提出建议 - 是否有任何替代方案可以实现这一点

最佳答案

可以在 IE11/Edge 中使用 document.all(id)document.all[id] - 至少在以下情况下站点有 HTML4 文档类型,也许还有相关的兼容性功能。它似乎也适用于(对我来说)E11/Edge 和 HTML5; YMMV 最后的配置。

也就是说,即使它是 "no longer supported" - even marked as removed (所以 YMMV 在“兼容”模式之外) - 它仍然在 IE11 中实现。 Windows XP“不再受支持”,但它继续被使用,并且仍然像以前一样运行……别介意它是一艘废弃的船。 (该文档仅暗示 HTML5 文档类型触发绿地行为;尽管我无法观察到所声称的效果。)

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

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

因此,如果希望更改已弃用/过时的用法,正确的解决方案修改“1000 个 JSP 文件”。通过一些分析,这应该可以通过大部分自动化的全局替换以及差异/增量代码审查来实现。


1FWIW,最基本的填充程序,假设在 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 的当前用法,以确保填充程序覆盖现有用法;未涵盖的少数用法应批量更新。

如果这样的填充程序足够了,仍然需要将其注入(inject)到所有“1000 个 JSP 文件”中;希望已经有一个通用脚本文件..

关于javascript - 是否可以在 IE11 中使用 "document.all"而不更改每个用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426323/

相关文章:

javascript - 如何在 Vuex 商店创建后手动添加 getters/mutations?

javascript - 在不使用内联匿名函数的情况下在 JavaScript 中使用 setInterval

javascript - jQuery 无法识别 IE 中的 <embed> 元素

c# - 更改 Internet Explorer 安全设置(初始化和脚本 activex 控件不裸...)

ajax - 动态加载内容然后前进和后退时 Internet Explorer 和 Firefox 的差异

html - IE定位问题

javascript - JavaScript 中的 {} + {} 是什么?

javascript - 在拨动开关上更改一行中单元格的值

javascript - 将文本从文本区域传输到列表

javascript - 我的 IE9 没有尾随逗号,用户的 IE9 不行;为什么?