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

  发布于 2023-02-12 18:27

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

var ieVersion = undefined;
/*@cc_on
   ieVersion = Math.floor(@_jscript_version);
@*/

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

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

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


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

IE9的未记录限制为41个audio元素(无论是在HTML中声明还是在JS对象中声明).所有后续音频文件都无法加载和播放.(41个元素中的每一个都可以重新分配它的源,但是每一次重新分配也都会无声地失败.我很想看到这些错误背后的代码......)

播放短音时IE10和IE11"口吃":它们只播放一小段时间,然后暂停,然后继续播放.对最终用户的影响是音频难以理解.(audios有preload="auto"并报告非零缓冲区.)

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

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

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

1 个回答
  • 是的,IE11删除了javascript条件编译


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

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

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


    一些解决方法如下:

    用户代理检测

     /\([^)]*Trident[^)]*rv:([0-9.]+)/.exec(ua)
    

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

    ScriptEngineMajorVersion()(感谢@Teemu)

     var tridentVersion = 
         typeof ScriptEngineMajorVersion === "function" ?
             ScriptEngineMajorVersion() : undefined
    

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


    感谢所有评论者.

    2023-02-12 18:30 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有