我有以下javascript代码段来检测浏览器是否为IE 6-11:
var isIE = /*@cc_on!@*/false || !!document.documentMode;
我从一个很好的答案on SO here中复制了此内容。但是,当我使用yuicompressor缩小脚本时,它会因以下错误而中断:
[ERROR] in utils.js
349:33:missing ; before statement
[ERROR] in utils.js
1:0:Compilation produced 1 syntax errors.
org.mozilla.javascript.EvaluatorException: Compilation produced 1 syntax errors.
at com.yahoo.platform.yui.compressor.YUICompressor$1.runtimeError(YUICompressor.java:172)
at org.mozilla.javascript.Parser.parse(Parser.java:396)
at org.mozilla.javascript.Parser.parse(Parser.java:340)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:315)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.<init>(JavaScriptCompressor.java:536)
at com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.java:147)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:21)
我read up on yuicompressor发现,它可以保留javascript块注释,例如:/*! comment */
,但是将代码段更改为以下内容并不能解决问题:
var isIE = /*!@cc_on!@*/false || !!document.documentMode;
错误消息仍然相同。而且我还想知道这是否会破坏条件编译? All the examples of conditional compilation像这样/*@
来打开注释,然后像这样@*/
来关闭它:{{1}}使我认为条件编译仅适用于注释符号的这种组合。
有人知道我如何使它工作吗?此处,也可以接受其他具有相同功能并正确通过yuicompressor传递的解决方案。
答案 0 :(得分:0)
检测IE的另一种方法是对IE <= 9使用全局变量。这将通过yuicompressor验证:
<html>
<body>
<!--[if IE]><script>isIE9OrLess = true;</script><![endif]-->
<script>
var isIE9OrLess = (typeof isIE9OrLess !== 'undefined');
document.write('are we in ie <= 9? ' + (isIE9OrLess ? 'yes' : 'no') + '<br>');
// detect ie > 9 using document.documentMode
var isIE = isIE9OrLess || !!document.documentMode;
document.write('are we in ie at all? ' + (isIE ? 'yes' : 'no'));
</script>
</body>
</html>
这不是理想的选择,因为它仅绕过问题而没有实际解决。