我已经从https://github.com/yui/yuglify下载了yuglify (yuglify),我打算将它用于托管在JavaScript服务器上的一些JavaScript项目上的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?
发布于 2013-11-12 04:47:25
我找到了解决这个问题的方法,通过使用eval命令来解决这个问题。
首先,我创建了以下全局变量:
var is_IE_browser = eval('/*@cc_on !@*/false');
var jscript_version = (is_IE_browser) ? eval("/*@cc_on @_jscript_version @*/") : (0);
var IE_version = (is_IE_browser) ? (get_IE_version()) : (0);然后,我创建了这个函数:
function get_IE_version(){
var IE_version;
if(jscript_version == 5.6 || (jscript_version == 5.7 && navigator.userAgent.toLowerCase().indexOf("msie 6.") != -1)) {
IE_version = 6;
} else if(jscript_version == 5.7){
IE_version = 7;
} else if(jscript_version == 5.8){
IE_version = 8;
} else if(jscript_version == 9){
IE_version = 9;
} else if(jscript_version == 10){
IE_version = 10;
} else {
IE_version = 0;
}
return IE_version;
}通过这样做,现在我可以使用上面的变量用几个条件替换所有的条件编译代码(cc_on)。
如果浏览器是IE,变量"is_IE_browser“将返回true,否则返回false。
如果浏览器是IE,变量"IE_version“将返回IE版本号,否则返回零。
使用这段代码,我可以可靠地检测大多数IE浏览器(除了IE6,它需要对浏览器用户代理数据进行一些搜索,而且它很容易受到浏览器嗅探的攻击,但我可以接受它)。
这样,我就可以很好地检测到较老的浏览器,并继续使用yuglify,而不会损坏我的JS文件。
https://stackoverflow.com/questions/14380971
复制相似问题