有 朋友问起我jGridViewBar 的压缩是用的什么工具,我用的是一个普通的HTML的 转换器,现在找出来与大家共享。 在线Demo:http://www.senparc.com/WebTools.xhtml/JsPack 把下列代码保存为.html直接在浏览器中打开就能用
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
>
<
html
>
<
head
>
<
title
>
Javascript Compressor
</
title
>
<
meta
http-equiv
="Content-Type"
content
="text/html; charset=GB2312"
/>
<
script
type
="text/javascript"
>
function ICommon(that) { if (that != null ) { that.inherit = Common.prototype.inherit; that.specialize = Common.prototype.specialize } return that } ; ICommon.specialize = function (p,c) { if ( ! p)p = {} ; if ( ! c)c = p.constructor; if (c == {} .constructor) c = new Function( " this.inherit() " ); c.valueOf = new Function( " return this " ); c.valueOf.prototype = new this .valueOf; c.valueOf.prototype.specialize(p); c.prototype = new c.valueOf; c.valueOf.prototype.constructor = c.prototype.constructor = c; c.ancestor = this ; c.specialize = arguments.callee; c.ancestorOf = this .ancestorOf; return c } ; ICommon.valueOf = new Function( " return this " ); ICommon.valueOf.prototype = { constructor:ICommon,inherit: function () { return arguments.callee.caller.ancestor.apply( this ,arguments) } ,specialize: function (that) { if ( this == this .constructor.prototype && this .constructor.specialize) { return this .constructor.valueOf.prototype.specialize(that) } for ( var i in that) { switch (i) { case " constructor " : case " toString " : case " valueOf " : continue } if ( typeof that[i] == " function " && that[i] != this [i]) { that[i].ancestor = this [i] } this [i] = that[i] } if (that.toString != this .toString && that.toString != {} .toString) { that.toString.ancestor = this .toString; this .toString = that.toString } return this } }; function Common() {} ; this .Common = ICommon.specialize( { constructor:Common,toString: function () { return " [common " + ( this .constructor.className || " Object " ) + " ] " },instanceOf: function (klass) { return this .constructor == klass || klass.ancestorOf( this .constructor) } }); Common.className = " Common " ; Common.ancestor = null ; Common.ancestorOf = function (klass) { while (klass && klass.ancestor != this ) klass = klass.ancestor; return Boolean(klass) } ; Common.valueOf.ancestor = ICommon; function ParseMaster() { var E = 0 ,R = 1 ,L = 2 ; var G =/ /( / g,S =/ /$/d / ,I =/^ /$/d + $ / ,T =/ ([' " ])/1/+(.*)/+/1/1$/,ES=///./g,Q=/'/,DE=//x01[^/x01]*/x01/g; var self=this; this.add=function(e,r){ if(!r)r= "" ; var l=(_14(String(e)).match(G)|| "" ).length+1; if(S.test(r)){ if(I.test(r)){ r=parseInt(r.slice(1))-1 }else{ var i=l; var q=Q.test(_14(r))?' " ': " ' " ; while (i) r = r.split( " $ " + i -- ).join(q + " +a[o+ " + i + " ]+ " + q); r = new Function( " a,o " , " return " + q + r.replace(T, " $1 " ) + q) } } _33(e|| " /^$/ " ,r,l) }; this .exec = function (s) { _3.length = 0 ; return _30(_5(s, this .escapeChar).replace( new RegExp(_1, this .ignoreCase ? " gi " : " g " ),_31), this .escapeChar).replace(DE, "" ) } ; this .reset = function () { _1.length = 0 } ; var _3 = []; var _1 = []; var _32 = function () { return " ( " + String( this [E]).slice( 1 , - 1 ) + " ) " } ; _1.toString = function () { return this .join( " | " )} ; function _33() { arguments.toString = _32; _1[_1.length] = arguments } function _31() { if ( ! arguments[ 0 ]) return "" ; var i = 1 ,j = 0 ,p; while (p = _1[j ++ ]) { if (arguments[i]) { var r = p[R]; switch ( typeof r) { case " function " : return r(arguments,i); case " number " : return arguments[r + i] } var d = (arguments[i].indexOf(self.escapeChar) ==- 1 ) ? "" : " /x01 " + arguments[i] + " /x01 " ; return d + r } else i += p[L] } }; function _5(s,e) { return e ? s.replace( new RegExp( " // " + e + " (.) " , " g " ), function (m,c) { _3[_3.length] = c; return e } ):s} ; function _30(s,e) { var i = 0 ; return e ? s.replace( new RegExp( " // " + e, " g " ), function () { return e + (_3[i ++ ] || "" )} ):s } ; function _14(s) { return s.replace(ES, "" )} }; ParseMaster.prototype= { constructor:ParseMaster,ignoreCase: false ,escapeChar: "" } ; if ( / MSIE 5.0 / .test(navigator.userAgent)) new function () { var ap = function (f,o,a) {f.apply(o,a)} ; if (''.replace( /^/ ,String)) { var _28 = String.prototype.replace; var _29 = function (e,r) { var m,n = "" ,s = this ; while (s && (m = e.exec(s))) { n += s.slice( 0 ,m.index) + ap(r, this ,m); s = s.slice(m.lastIndex) } return n + s } ; String.prototype.replace = function (e,r) { this .replace = ( typeof r == " function " ) ? _29:_28; return this .replace(e,r) } } if ( ! Function.apply) { var APPLY = " apply- " + Number( new Date); ap = function (f,o,a) { var r; o[APPLY] = f; switch (a.length) { case 0 :r = o[APPLY](); break ; case 1 :r = o[APPLY](a[ 0 ]); break ; case 2 :r = o[APPLY](a[ 0 ],a[ 1 ]); break ; case 3 :r = o[APPLY](a[ 0 ],a[ 1 ],a[ 2 ]); break ; case 4 :r = o[APPLY](a[ 0 ],a[ 1 ],a[ 2 ],a[ 3 ]); break ; default : var aa = [],i = a.length - 1 ; do aa[i] = " a[ " + i + " ] " ; while (i -- );eval( " r=o[APPLY]( " + aa + " ) " ) } delete o[APPLY]; return r } ; if ( typeof ICommon == " function " ) ICommon.valueOf.prototype.inherit = function () { return ap(arguments.callee.caller.ancestor, this ,arguments) } } if ( ! [].push) Array.prototype.push = function () { for ( var i = 0 ;i < arguments.length;i ++ ) { this [ this .length] = arguments[i] } return this .length } ; if ( ! [].pop) Array.prototype.pop = function () { var i = this [ this .length - 1 ]; this .length -- ; return i } }; function pack(_7,_0,_2,_8) { var I = " $1 " ;_7 += " /n " ; _0 = Math.min(parseInt(_0), 95 ); function _15(s) { var i,p; for (i = 0 ;(p = _6[i]);i ++ ) {s = p(s)} return s } ; var _25 = function (p,a,c,k,e,d) { while (c -- ) if (k[c]) p = p.replace( new RegExp('//b' + e(c) + '//b','g'),k[c]); return p } ; var _26 = function () { if ( ! ''.replace( /^/ ,String)) { while (c -- )d[e(c)] = k[c] || e(c); k = [ function (e) { return d[e]} ]; e = function () { return '//w + '} ; c = 1 } }; var _6 = []; function _4(p) { _6[_6.length] = p } ; function _18(s) { var p = new ParseMaster; p.escapeChar = " // " ; p.add( / '[ ^ '/n/r] * ' / ,I); p.add( / " [^ " /n/r] * " /,I); p.add(/[^/n/r]*[/n/r]/, " " ); p.add(*[^*]*/*+([^//][^*]*/*+)*///, " " ); p.add(//s+(//[^///n/r/*][^///n/r]*//g?i?)/, " $ 2 " ); p.add(/[^/w/x24//' " * )/ ? :]/ / [ ^ / / /n/r/ * ][ ^ / / /n/r] * / / g ? i ?/ ,I); if (_8)p.add( / ;;;[ ^ /n/r] + [/n/r] / ); p.add( / /(;;/) / ,I); p.add( / ; + /s * ([} ;]) / , " $2 " ); s = p.exec(s); p.add( / (/b | /x24)/s + (/b | /x24) / , " $2 $3 " ); p.add( / ([ + / - ])/s + ([ + / - ]) / , " $2 $3 " ); p.add( / /s +/ , "" ); return p.exec(s) } ; function _17(s) { var p = new ParseMaster; p.add( / ((/x24 + )([a - zA - Z_] + ))(/d * ) / , function (m,o) { var l = m[o + 2 ].length; var s = l - Math.max(l - m[o + 3 ].length, 0 ); return m[o + 1 ].substr(s,l) + m[o + 4 ] } ); var r =/ /b_[A - Za - z/d]/w */ ; var k = _13(s,_9(r),_21); var e = k.e; p.add(r, function (m,o) { return e[m[o]]} ); return p.exec(s) } ; function _16(s) { if (_0 > 62 )s = _20(s); var p = new ParseMaster; var e = _12(_0); var r = (_0 > 62 ) ?/ /w/w +/ : / /w +/ ; k = _13(s,_9(r),e); var e = k.e; p.add(r, function (m,o) { return e[m[o]]} ); return s && _27(p.exec(s),k) } ; function _13(s,r,e) { var a = s.match(r); var so = []; var en = {} ; var pr = {} ; if (a) { var u = []; var p = {} ; var v = {} ; var c = {} ; var i = a.length,j = 0 ,w; do { w = " $ " + a[ -- i]; if ( ! c[w]) { c[w] = 0 ; u[j] = w; p[ " $ " + (v[j] = e(j))] = j ++ } c[w]++ } while (i); i = u.length; do { w = u[ -- i]; if (p[w] != null ) { so[p[w]] = w.slice( 1 ); pr[p[w]] = true ; c[w] = 0 } } while (i); u.sort( function (m1,m2) { return c[m2] - c[m1]} ); j = 0 ; do { if (so[i] == null ) so[i] = u[j ++ ].slice( 1 ); en[so[i]] = v[i] } while ( ++ i < u.length) } return {s:so,e:en,p:pr} }; function _27(p,k) { var E = _10( " e//(c//) " , " g " ); p = " ' " + _5(p) + " ' " ; var a = Math.min(k.s.length,_0) || 1 ; var c = k.s.length; for ( var i in k.p) k.s[i] = "" ; k = " ' " + k.s.join( " | " ) + " '.split('|') " ; var e = _0 > 62 ? _11:_12(a); e = String(e).replace( / _0 / g, " a " ).replace( / arguments/.callee / g, " e " ); var i = " c " + (a > 10 ? " .toString(a) " : "" ); if (_2) { var d = _19(_26); if (_0 > 62 )d = d.replace( / w / g, " [//xa1-//xff] " ); else if (a < 36 )d = d.replace(E,i); if ( ! c)d = d.replace(_10( " (c)//s*=//s*1 " ), " $1=0 " ) } var u = String(_25); if (_2) { u = u.replace( / / { / , " { " + d + " ; " ) } u= u.replace( / " /g, " ' " ); if(_0>62){ u=u.replace(/'b'/s*/+|/+/s*'b'/g, "" ) } if(a>36||_0>62||_2){ u=u.replace(//{/, " {e = " +e+ " ; " ) }else{ u=u.replace(E,i) } u=pack(u,0,false,true); var p=[p,a,c,k]; if(_2){ p=p.concat(0, " {} " ) } return " eval( " +u+ " ( " +p+ " ))/n " }; function _12(a){return a>10?a>36?a>62?_11:_22:_23:_24}; var _24=function(c){ return c }; var _23=function(c){ return c.toString(36) }; var _22=function(c){ return(c<_0?'':arguments.callee(parseInt(c/_0)))+((c=c%_0)>35?String.fromCharCode(c+29):c.toString(36)) }; var _11=function(c){ return(c<_0?'':arguments.callee(c/_0))+String.fromCharCode(c%_0+161) }; var _21=function(c){ return" _ " +c }; function _5(s){ return s.replace(/([//'])/g, " //$ 1 " ) }; function _20(s){ return s.replace(/[/xa1-/xff]/g,function(m){ return " //x " +m.charCodeAt(0).toString(16) }) }; function _10(s,f){ return new RegExp(s.replace(//$/g, " //$ " ),f) }; function _19(f){ with(String(f))return slice(indexOf( " { " )+1,lastIndexOf( " } " )) }; function _9(r){ return new RegExp(String(r).slice(1,-1), " g " ) }; _4(_18); if(_8)_4(_17); if(_0)_4(_16); return _15(_7) }; var input,output; οnlοad=function(){ if(!document.getElementById||''.replace(/^/,String))return; input=document.getElementById( " input " );//内容 文本区域 var message=document.getElementById( " message " );//消息 var encoding=document.getElementById( " ascii - encoding " );//编码方式 选择列表 值有0、10、62、95 var fastDecode=document.getElementById( " fast - decode " );//快速解码 选择框 var specialChars=document.getElementById( " special - chars " );//特殊字符 选择框 function packScript(){//执行压缩 try{ if(input.value){ input.value=pack(input.value,encoding.value,fastDecode.checked,specialChars.checked); //调用编码函数 输入代码, 编码方式, 是否快速解码, 是否特殊字符 } }catch(e){ reportError( " error packing script " ,e.message) } }; function decodeScript(){//执行解码 try{ if(input.value.substring(0,27)== " eval( function (p,a,c,k,e,d) { " ){ eval( " input.value = String " +input.value.slice(4)); } else reportError( " 代码解码取消 " , " 您的代码没有用此方法压缩! " ); }catch(e){ reportError( " 代码解码错误 " ,e.message) } }; function enableFastDecode(){ fastDecode.disabled=Boolean(encoding.value==0); fastDecode.parentNode.className=(encoding.value==0)? " disabled " : "" }; function reportError(m,e){ message.innerHTML=m+(e?" : " +e: "" ); message.className= " error " }; encoding.οnclick=enableFastDecode; var buttons=document.getElementsByTagName(" button " ); var button,i; for(i=0;(button=buttons[i]);i++){ var handler=eval(button.id); button.οnclick=handler; handler.button=button } }; </script> </head> <body > <form id= " packer " action= "" method= " post " > <label for= " input " >Paste your code:</label> <br /> <textarea id= " input " name= " input " rows= " 10 " cols= " 79 " ></textarea> <div class= " r ar " > <p id= " controls " > <label for= " ascii - encoding " >Encoding:</label> <select id= " ascii - encoding " name= " ascii_encoding " > <option value= " 0 " >None</option> <option value= " 10 " >Numeric</option> <option value= " 62 " selected= " selected " >Normal</option> <option value= " 95 " >High ASCII</option> </select><br /> <label for= " fast - decode " >Fast Decode: <input type= " checkbox " id= " fast - decode " name= " fast_decode " value= " 1 " checked= " checked " /></label><br /> <label for= " special - chars " >Special Characters: <input type= " checkbox " id= " special - chars " name= " special_chars " value= " 1 " /></label> </p> </div> <button type= " button " id= " packScript " >Compress</button> <button type= " button " id= " decodeScript " >Decode</button> <p id= " message " ></p> </form> </body> </html>
界面: 输入js代码: Compress之后的 显示效果: PS:这段代码是我很久前在网上找的,现在可能有更新的版本或者压缩形式,如果有更好的,欢迎交流!