IE11是否删除了javascript条件编译?

Jer*_*emy 11 javascript internet-explorer internet-explorer-11

我一直在使用javascript条件编译确定IE Trident引擎的版本:

var ieVersion = undefined;
/*@cc_on
   ieVersion = Math.floor(@_jscript_version);
@*/
Run Code Online (Sandbox Code Playgroud)

这适用于IE8,9和10.在IE11中,条件评论的块不执行,除非我使用F12开发工具模拟IE10(在这种情况下它返回正确的值,11).

这很令人困惑,因为条件编译上MSDN页面指定它适用于Internet Explorer 11.(更新2015年2月3日:此页面进行了更新,明确规定其含量.适用于IE11的标准模式),我没有发现任何信息网上表明IE11不应该支持有条件的意见.

有没有人有这方面的信息?任何人都可以在IE11中重现这种行为吗?


编辑:这与IE的<audio>支持相关.我有一个网络应用程序需要播放大约50个短(~1秒)的音频文件,这些文件应该以(伪)随机顺序播放,并在用户交互后单独播放.问题是多种多样的:

  • IE9的未记录限制为41个audio元素(无论是在HTML中声明还是在JS对象中声明).所有后续音频文件都无法加载和播放.(41个元素中的每一个都可以重新分配它的源,但是每一次重新分配也都会无声地失败.我很想看到这些错误背后的代码......)
  • 播放短音时IE10和IE11"口吃":它们只播放一小段时间,然后暂停,然后继续播放.对最终用户的影响是音频难以理解.(audios有preload="auto"并报告非零缓冲区.)

当然,没有实用的方法来检测这些问题,因此浏览器检测.我一般认为用户代理嗅探对于生产代码来说过于冒险; 这项@cc_on技术似乎更加强大.

我对IE9的解决方法是将应用程序状态sessionStorage序列化为第25个声音,然后重新加载页面并反序列化.

在IE10/11中,我的解决方法是以0音量播放最后90%的音频,这似乎迫使IE 实际缓冲文件.

Jer*_*emy 12

是的,IE11删除了javascript条件编译


在上面链接的两个MSDN页面之后,问题中链接的谷歌搜索将此问题作为第三个结果返回.这确定了缺乏更好的来源,所以我认为这个问题(包括评论)应该被认为是在IE11中没有Javascript条件编译这一事实的权威参考.

我已经在MSDN页面上提交了反馈,说明它们不正确.

更新2015-02-03:MSDN现在承认IE11不再支持@cc_on.


一些解决方法如下:

用户代理检测

 /\([^)]*Trident[^)]*rv:([0-9.]+)/.exec(ua)
Run Code Online (Sandbox Code Playgroud)

将解析IE11的UA字符串并在结尾返回"修订号".

ScriptEngineMajorVersion()(感谢@Teemu)

 var tridentVersion = 
     typeof ScriptEngineMajorVersion === "function" ?
         ScriptEngineMajorVersion() : undefined
Run Code Online (Sandbox Code Playgroud)

应该在所有浏览器上正确评估,但我们不能保证ScriptEngineMajorVersion不会在没有警告的情况下删除,就像条件编译一样.


感谢所有评论者.