浏览器检测之@cc_on,IE浏览器之条件编译

发表于:
来源:阿酷技术学习
作者:阿酷

做前端WEB开发时,经常会有很多需要检测,比如提供一个功能看浏览器是否支持,可以硬代码UA做判断看浏览器是否支持,使用Modernizr对浏览器html5支持情况检测,也可以用原生JS操作DOM特性等测检方法。

首先们要知道:

  • not standard,它的特性是一个非标准的.尽量不要在生产平台上使用,在兼容上也存上很大不确定性,将来可能随时变化。
  • obsolete,废弃的。虽然它仍然可以在一些浏览器上使用,但并不鼓励。尽量避免使用它。
  • 条件编译在IE 11标准模式和win8 apps store已经不支持。但是IE10,以及早期浏览器仍然可以使用。

所以@cc_on 是 IE10 及更旧版IE特有的条件编译语句,因此可以用来判断是否除 IE11 的其他IE版本

需求:考虑到微软已经停止更新IE10以及更低版本的IE,为了用户使用安全和更好的使用体验,不再支持旧版IE。双核浏览器访问时默认采用 Chrome 内核,IE11 以下旧版IE访问时跳转到升级提示页。

代码如下:

<meta name="renderer"content="webkit"/>
<meta name="force-rendering"content="webkit"/>
<meta http-equiv="X-UA-Compatible"content="IE=Edge,chrome=1"/>
<script>/*@cc_on window.location.href="http://support.dmeng.net/upgrade-your-browser.html?referrer="+encodeURIComponent(window.location.href); @*/</script>

条件编译语法

语法规范,代码要写在/*@ @*/之间。像这样IE10及其以下,支持条件编译的浏览器,能正确编译,不能识别的浏览器W3C浏览器会认为注释。

激活条件编译

以@cc_on激活。

/*@cc_on yourcode @*/
/*@cc_on
    document.write("JavaScript version: " + @_jscript_version + ".");  
    document.write("<br />");  
@*/

 

以@if激活

/*@if (  
   condition1  
)  
   text1  
[@elif (  
   condition2  
)  
   text2]  
[@else  
   text3]  
@end*/

以@set激活

/*@set @varname = term@*/

条件表达式的其它变量

Variable

Description

@_win32

True if running on a Win32 system.

@_win16

True if running on a Win16 system.

@_mac

True if running on an Apple Macintosh system.

@_alpha

True if running on a DEC Alpha processor.

@_x86

True if running on an Intel processor.

@_mc680x0

True if running on a Motorola 680x0 processor.

@_PowerPC

True if running on a Motorola PowerPC processor.

@_jscript

Always true.

@_jscript_build

Contains the build number of the JScript scripting engine.

@_jscript_version

Contains the JScript version number in major.minor format.

 

参考资料:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Microsoft_Extensions/at-cc-on