You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何IE9下CSS类未被if(/*@cc_on!@*/false)代码覆盖?

为什么if(/*@cc_on!@*/false)在IE10会覆盖CSS类,IE9却不会?

这个问题的核心在于IE9和IE10对JavaScript条件编译语法与脚本执行逻辑的处理差异,咱们拆解细节来看:

先搞懂/*@cc_on!@*/false是什么

这是IE专属的条件编译trick,利用IE对特殊注释的解析规则生成版本依赖的布尔值:

  • 条件编译是IE早期用来针对不同版本写专属代码的机制,@cc_on是开启条件编译的标记。
  • 这个表达式通过注释嵌套,让不同IE版本解析出完全不同的布尔结果。

IE9的执行流程(不覆盖类名)

  1. HTML条件注释生效:IE9完全支持传统的<!--[if IE 9]>条件注释,页面加载时会直接给<html>标签加上ie9 lt-ie10 lt-ie11 lt-ie12 gt-ie8 gt-ie7 gt-ie6这些类。
  2. UA判断不触发:IE9的UserAgent包含Trident/5.0,不会匹配脚本里的Trident/7.0(IE11)或Trident/6.0(IE10)分支,所以这部分代码不会修改类名。
  3. 条件编译表达式求值为false:在IE9中,/*@cc_on!@*/false会被解析为false,因此if(false)块里的代码不会执行,自然不会覆盖之前的类名。

IE10的执行流程(覆盖类名)

  1. HTML条件注释失效:IE10开始废弃了对HTML条件注释的支持,开头的<!--[if IE 9]>会被当作普通注释忽略,<html>初始没有任何IE专属类。
  2. UA判断触发类名设置:IE10的UserAgent包含Trident/6.0,会匹配脚本里的第二个分支,给<html>加上ie10 lt-ie11 lt-ie12 gt-ie9 gt-ie8 gt-ie7 gt-ie6类。
  3. 条件编译表达式求值为true:IE10虽然废弃了HTML条件注释,但保留了对JavaScript中条件编译的支持,不过解析逻辑有变化——/*@cc_on!@*/false在这里会被解析为true,所以if(true)块里的代码会执行,把<html>的类名替换成gt-ie11 gt-ie10 gt-ie9 gt-ie8 gt-ie7 gt-ie6,直接覆盖了之前通过UA判断设置的类名。

总结差异根源

微软在IE10中对条件编译机制做了针对性调整:

  • 移除HTML条件注释支持,迫使开发者转向UA检测或特性检测方案。
  • 修改了JavaScript中条件编译的解析规则,导致/*@cc_on!@*/false这个trick的求值结果在IE9(false)和IE10(true)中完全相反,这就是你看到的类名覆盖差异的核心原因。

内容的提问来源于stack exchange,提问作者Jayesh Dhandha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:47:10