我一直在使用确定IE Trident引擎的版本 javascript条件编译:
var ieVersion = undefined;
/*@cc_on
ieVersion = Math.floor(@_jscript_version);
@*/
这适用于IE8,9和10.在IE11中,条件评论的块不执行, 除非 我使用F12开发工具来模拟IE10(在这种情况下,它返回正确的值,11)。
这是令人困惑的,因为 关于条件编译的MSDN页面 指定它适用于Internet Explorer 11。 (更新2015-02-03:此页面已更新,以明确说明其内容 才不是 在标准模式下适用于IE11。)我 没有在网上找到任何信息 建议IE11不应该支持条件评论。
有没有人有这方面的信息?任何人都可以在IE11中重现这种行为吗?
编辑:这与IE的相关性 <audio>
支持。我有一个网络应用程序需要播放约50个短(~1秒)音频文件,这些文件应以(伪)随机顺序播放,并在用户交互后单独播放。问题是多种多样的:
- IE9的无证限制为41
audio
元素(无论是在HTML中声明还是在JS对象中声明)。所有后续音频文件都无法加载和播放。 (41个元素中的每一个都可以重新分配它的源,但是每一次重新分配也会无声地失败。我很想看到这些错误背后的代码......) - 播放短音时IE10和IE11“口吃”:它们只播放一秒钟,然后暂停,然后继续播放。对最终用户的影响是音频难以理解。 (该
audio
有preload="auto"
并报告非零缓冲区。)
当然,没有实用的方法来检测这些问题,因此浏览器检测。我一般认为用户代理嗅探对于生产代码来说过于冒险;该 @cc_on
技术似乎更强大。
我对IE9的解决方法是将应用程序状态序列化为 sessionStorage
在第25个声音之后,然后重新加载页面并反序列化。
在IE10 / 11中,我的解决方法是以0音量播放最后90%的音频,这似乎迫使IE使用 其实 缓冲文件。