使用yuicompressor进行条件补偿

时间:2018-08-24 00:00:15

标签: javascript conditional-compilation yui-compressor

我有以下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传递的解决方案。

1 个答案:

答案 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>

这不是理想的选择,因为它仅绕过问题而没有实际解决。