Javascript 是否可以使用;文件.全部“;在IE11中不改变每个用法?
我在做老项目。其中,JavaScript中使用了Javascript 是否可以使用;文件.全部“;在IE11中不改变每个用法?,javascript,internet-explorer,Javascript,Internet Explorer,我在做老项目。其中,JavaScript中使用了document.all()。相同的命令在IE8、9、10中运行良好,但在IE11中不起作用 我知道我们需要使用document.getElementById(),但我需要更改近1000个JSP文件来实现此更改 请建议-是否有任何替代方案使其成为可能?可以在IE11/Edge中使用document.all(id)和document.all[id]——至少在站点具有HTML4 doctype以及相关兼容性功能时是这样。在E11/Edge和HTML5中
document.all()
。相同的命令在IE8、9、10中运行良好,但在IE11中不起作用
我知道我们需要使用document.getElementById()
,但我需要更改近1000个JSP文件来实现此更改
请建议-是否有任何替代方案使其成为可能?可以在IE11/Edge中使用document.all(id)
和document.all[id]
——至少在站点具有HTML4 doctype以及相关兼容性功能时是这样。在E11/Edge和HTML5中,它似乎也起作用(对我而言);最后一个配置上的YMMV
也就是说,即使它是——而且是(在“兼容性”模式之外),它仍然在IE11中实现。Windows XP“不再受支持”,但它仍在继续使用,而且运行情况仍然与以前一样好。。不管它是一艘废弃的船。(文档中仅提及触发绿地行为的HTML5 doctype;尽管我无法观察到声称的效果。)
因为这是一个“老项目”,最简单的解决方案是不必管它,根据需要触发IE“兼容性模式”;无论如何,可能还有许多其他过时的方法。也就是说,将站点保留为HTML4,因为这毕竟是一个“老项目”
虽然我最初建议在注释中使用“填隙”1,但所需的属性/对象由于几个原因存在问题,all[id]
形式无法模仿RobG指出的那样。此外,这样的垫片实际上不会更新代码以使用经批准的方法——这只是一个谎言,与最初删除此类垫片的原因背道而驰
因此,如果希望更改不推荐/陈旧的用法,正确的解决方案是修改“1000个JSP文件”。通过一点分析,这应该是可能的,主要是自动化的全局替换,然后是差异/增量代码审查
1FWW是最基本的垫片,假设在IE11-where-document.all-is-REQUALY-removed中可以重新分配到document.all,则其如下所示:
if (!document.all) {
document.all = document.getElementById;
}
这将允许document.all(someId)
但不允许all(name)
、all[id]
、all.length
或all.item(id)
。文档的当前使用情况。仍需查看所有的,以确保垫片涵盖现有使用情况;还有一些没有涵盖的用法应该全面更新
如果这样一个垫片是足够的,它仍然需要注入到所有的“1000个JSP文件”;希望已经有了一个通用的脚本文件。通过强制IE11模拟IE10(我使用了meta标记
document.all变得可用)
填充文档的问题在于,它实际上是一个可以调用的属性,例如document。all('foo')
与document相同。all['foo']
并且它将名称和ID属性视为相同的('foo'可以是名称或ID).@user2864740是的,只要使用限制为getElementById所做的,但是全局替换也会起作用。:-)可能它只在兼容模式下启用?我现在不能试一试moment@Worf是 啊我有点不确定。在IE11/Edge/HTML4文档中。尽管所有的都存在。可能是HTML5(不兼容,但仍然是IE11/Edge)触发了这一点。@Worf我实际上无法获取文档。所有都将消失。我想看一个例子,在这个例子中,它确实被“删除”,正如文档中所声称的那样。@Worf当我们使用兼容模式时,它工作得很好。但客户不同意使用兼容模式。@phanikrishna使用什么HTML doctype?您是否有显示document.all“不工作”的最小HTML文件?我不相信文档。所有都在HTML4下删除(文档表明HTML5 doctype是必需的触发器);但我无法触发document.all消失,即使在E11/Edge和HTML5下。然而,这并不意味着我的系统上没有不可靠的本地设置/配置。。但是我没有明确选择兼容模式和文档。所有都仍然可用。