@cc_on 语句 与javascript的条件编译
@cc_on 文档
激活条件编译支持。
@cc_on
说明
@cc_on 语句激活 scripting 引擎中的条件编译。
极力推荐在注释中使用 @cc_on 语句,以使不支持条件编译的浏览器也接受此脚本为有效语法:
/*@cc_on*/
...
(脚本的剩余部分)
作为选择,在注释外的一个 @if 或 @set 语句也会激活条件编译。
[来自Microsoft Jscript文档]
jscript/javascript条件编译
在IE中,有一个鲜为人知的功能叫做条件编译(conditional compilation)。自从IE4开始支持这个功能,它由于在一些Ajax相关的javascript脚本中出现而受到一些关注。条件编译作为一种独立形式的对象判断,使得IE可以根据预定义或用户定义的条件来决定你的jscript或javascript代码特定部分是否编译。也可以把它看成是你的代码的条件注释(contional comments,很快会翻译这篇文章),使你的代码能够在非IE浏览上也顺利运行。
语法概述
通过在你的脚本中使用@cc_on来激活条件编译,或者直接使用@if或者@set等等作为CC逻辑中一部分的句子来激活它。这里是一个示范例子:
<script type="text/javascript">
/*@cc_on
document.write("JScript 版本: " + @_jscript_version + ".<br>");
/*@if (@_jscript_version >= 5)
document.write("JScript 版本 5.0+.<br \/>");
document.write("只有当浏览器支持JScript5+的时候你才能看到这些文字.<br>");
@else @*/
document.write("当你使用其他浏览器(比如: Firefox, IE 4.x 之类)的时候看到这行文字<br>");
/*@end
@*/
</script>
例子: From http://www.blueidea.com/tech/web/2006/3238.asp
<script type="text/javascript">
/*@cc_on
document.write("JScript 版本: " + @_jscript_version + ".<br />");
/*@if (@_jscript_version >= 5)
document.write("JScript 版本 5.0+.<br />");
document.write("只有当浏览器支持JScript5+的时候你才能看到这些文字。<br />");
@else @*/
document.write("当你使用其他浏览器(比如: Firefox, IE 4.x 之类)的时候看到这行文字。<br />");
/*@end
@*/
</script> www.aspxuexi.com
如果你使用IE(任何版本),你应该能够看到第一个document.write()的输出,如果是IE5+,接下来的两个document.write()你也能够看见(因为从IE5开始支持JScript 5)。最后一个document.write()方法是为了其他非IE5+浏览器服务的,无论是Firefox,opera,IE4,或者什么别的。条件编译依赖于类似在条件注释中使用的注释标签,以确保它在所有浏览器中都能工作顺畅。
当使用条件编译的时候,最好先通过@cc_on语句来激活它,只有这样你才能在你的脚本中包含注释标签以保证浏览器兼容,、就好像上面例子中所显示的那样。(子乌注:这句英文我翻译的不是很顺...看起来似乎与上面的句子矛盾)
@if, @elif, @else,@end 语句
在这个奇怪的开场白之后,这里是一些用于条件便于的条件语句:
@if
@elif
@else
@end
现在让我们看一些“古怪”的例子。
if else 逻辑 (排除IE外的浏览器)
/*@cc_on
@if (@_win32)
document.write("操作系统是32位windows。浏览器是IE。");
@else
document.write("操作系统不是32位windows。浏览器是IE。");
@end
@*/
这是一段完整的脚本,只被ie浏览器所识别并忽略其他所有浏览器,这段脚本在不同的操作系统上将显示不同的内容。对比一下下面这个例子……
if else 逻辑2 (包含其他浏览器) www.aspxuexi.com
/*@cc_on
/*@if (@_win32)
document.write("操作系统是32位windows。浏览器是IE。");
@else @*/
document.write("浏览器不是IE (如: Firefox)或者浏览器不是在32位windows下的IE。");
/*@end
@*/
熟练使用注释标签,这个例子中的else部分能够包含所有的非ie浏览器(如firefox),以及非32位windows下的IE。努力的研究这段注释,直到你脑袋发昏,你就会明白这个逻辑了
if, elseif, else逻辑 (排除IE外的浏览器)
继续吧,可以看全部内容了:
/*@cc_on
@if (@_jscript_version >= 5)
document.write("IE Browser that supports JScript 5+");
@elif (@_jscript_version >= 4)
document.write("IE Browser that supports JScript 4+");
@else
document.write("Very old IE Browser");
@end
@*/
if, elseif, else 逻辑2(包含其他浏览器)
/*@cc_on
/*@if (@_jscript_version >= 5)
document.write("IE Browser that supports JScript 5+");
@elif (@_jscript_version >= 4)
document.write("IE Browser that supports JScript 4+");
@else @*/
document.write("Non IE Browser (one that doesn't support JScript)");
/*@end
@*/
全面的处理。在这最后一个例子中,最后一个else语句包含了所有非IE浏览器。
再例如一个在放置firefox推广的例子,[Google adsense]
from http://www.fcicq.net/wp/?p=495
@cc_on是个什么东西呢?
说它之前先说说adsense的推广…(又跑远了,谁想打偶?)
1 firefox只能向windows用户推广
2 windows默认浏览器是IE
3 不会有人用<IE4
于是,偶写了这样的代码.
var agent = navigator.userAgent.toLowerCase();
if (agent.indexOf(’msie’)!=-1 && agent.indexOf(’opera’)==-1 && agent.indexOf(’aol’)==-1 && agent.indexOf(’netscape’)==-1)
(下面放广告.)
太长了是吧.
后来突然找到了@cc_on这神奇的东西.
1 @cc_on 语句激活 scripting 引擎中的条件编译。
2 推荐在注释中使用 @cc_on 语句 例: /*@cc_on*/
3 JScript 要求版本 3
4 版本 3 在 IE 4 出现
于是,就写出了
var isMSIE = /*@cc_on!@*/false;
不支持@cc_on的浏览器,isMSIE=false.
这应该就够了,但还没完,还有更短的的版本.
因为!1=false,所以…你应该知道了吧.
var isMSIE = /*@cc_on!@*/!1;
这就是一个测试浏览器的好方法,独有特性用来测试是不是IE,这可能是最短的了。
最后用msdn的说明来结尾吧.
JScript 8.0
@cc_on Statement
The @cc_on statement activates conditional compilation in the scripting engine.
It is strongly recommended that you use the @cc_on statement in a comment, so that browsers that do not support conditional compilation will accept your script as valid syntax:
/*@cc_on*/
// The remainder of the script.
Alternatively, an @if or @set statement outside of a comment also activates conditional compilation.
本文主题@cc_on