是否可以使用“;document.all”;在IE11中,而不改变每次使用
Is it possible to use "document.all" in IE11 without changing every usage?
我正在处理旧项目。其中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.length
或all.item(id)
。仍然需要查看document.all
的当前用法,以确保垫片覆盖了现有用法;并且应该大规模更新未涵盖的少数用途。
如果这样的填充程序就足够了,那么它仍然需要被注入到所有的"1000个JSP文件"中;希望已经有了一个通用的脚本文件。。
通过强制IE11模拟IE10(我使用了元标记<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE10"/>
文档。所有文档都可用。
jsbin
- 我可以使此幻灯片图像自动播放吗?
- HTML/JavaScript拖动&Drop-是否可以使重影图像*NOT*看起来'冲洗掉'
- 可以使 jquery 点击事件在所有其他点击事件之后执行
- 是否有一个Javascript函数可以使代码在运行时延迟
- 有什么方法可以使页面无法刷新吗
- 使用chrome.downloads.download,是否可以使文件不弹出下载栏
- javascript是否有一个选项可以使句点与任何字符匹配,包括换行符
- 有一种方法可以使jslint在使用控制台时显示警告或错误
- 有没有任何方法可以使<选择>转到url
- 有没有任何方法可以使这个名称生成循环运行最短的秒数
- JSXGraph 中有什么方法可以使图像不透明
- 有没有一种方法可以使Iframe根据需要进行扩展
- 是否可以使find()和findOne()方法只返回模式字段
- Javascript.创建类似数组的对象.是否可以使 .length 自动增量
- 是否可以使多个引导弹出窗口更加干燥
- 是否可以使控制器返回模式窗口的数据?MVC5 ASP.NET
- Jquery脚本是否可以使更小或更高效
- 有哪些方法可以使客户端更难操作 DOM
- 我们可以使数据列表自动完成以搜索文本和值吗?
- 是否有JS功能可以使Brightcove智能播放器视频开始播放