我已经从https://github.com/yui/yuglify下载了 Yahoo JavaScript Uglify (yuglify) ,我打算将它用于托管在 apache 服务器上的一些 PHP 项目的 JS 和 CSS 压缩。尝试使用以下原始内容缩小文件:
var _cmFrameList = new Array (); // a pool of reusable iframes
var _cmFrameListSize = 0; // keep track of the actual size
var _cmFrameIDCount = 0; // keep track of the frame id
var _cmFrameMasking = true; // use the frame masking
// disable iframe masking for IE7
/*@cc_on
@if (@_jscript_version >= 5.6)
if (_cmFrameMasking)
{
var v = navigator.appVersion;
var i = v.indexOf ("MSIE ");
if (i >= 0)
{
if (parseInt (navigator.appVersion.substring (i + 5)) >= 7)
_cmFrameMasking = false;
}
}
@end
@*/
var _cmClicked = false; // for onClick
但是得到了这个:
var _cmFrameList=new Array,_cmFrameListSize=0,_cmFrameIDCount=0,_cmFrameMasking=!0,_cmClicked=!1
在原始文件的内容中,有一些条件编译代码需要在较旧的 IE 浏览器上运行(注释行以 @cc_on、@if、@end 等开头)。似乎 yuglify 将这些条件编译行视为简单注释,因此将其全部删除。
出于好奇,我也在同一个文件(https://github.com/yui/yuicompressor/downloads)上测试了 yuicompressor,似乎所有条件编译代码都完好无损。甚至换行符仍然存在:
var _cmFrameList=new Array();var _cmFrameListSize=0;var _cmFrameIDCount=0;var _cmFrameMasking=true;
/*@cc_on
@if (@_jscript_version >= 5.6)
if (_cmFrameMasking)
{
var v = navigator.appVersion;
var i = v.indexOf ("MSIE ");
if (i >= 0)
{
if (parseInt (navigator.appVersion.substring (i + 5)) >= 7)
_cmFrameMasking = false;
}
}
@end
@*/
var _cmClicked=false;
如果没有这些条件编译行,旧的 IE 浏览器就会出现乱码。是否可以在不删除的情况下使用 yuglify?