Компресор JavaScript
Відомо, що JavaScript код завжди доступний разом з HTML. По цій причині захистити даний код (якщо така необхідність існує) доволі важко. Виходить, що розробивши чудовий AJAX-ефект і виклавши його на сайті, автор свідомо віддає його всім у довічне користування. Що робити?
Дану проблему частково можна вирішити за допомогою JavaScript компресора. За його допомогою "декодування" JavaScript коду стану справжнім випробуванням...
Розглянемо деякий скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // Navigation - Stop // Netscapes Clock - Start // this code was taken from Netscapes JavaScript documentation at // www.netscape.com on Jan.25.96 var timerID = null ; var timerRunning = false ; function stopclock (){ if (timerRunning) clearTimeout(timerID); timerRunning = false ; } function showtime () { var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes(); var seconds = now.getSeconds() var timeValue = "" + ((hours >12) ? hours -12 :hours) timeValue += ((minutes < 10) ? ":0" : ":" ) + minutes timeValue += ((seconds < 10) ? ":0" : ":" ) + seconds timeValue += (hours >= 12) ? " P.M." : " A.M." window.status = timeValue; // you could replace the above with this // and have a clock on the status bar: // timerID = setTimeout( "showtime()" ,1000); timerRunning = true ; } function startclock () { // Make sure the clock is stopped stopclock(); showtime(); } |
Ось що з ним буде після "обробки":
1 | var timerID= null ;var timerRunning= false ;function stopclock(){ if (timerRunning)clearTimeout(timerID);timerRunning= false }function showtime(){var now= new Date();var hours=now.getHours();var minutes=now.getMinutes();var seconds=now.getSeconds()var timeValue= "" +((hours>12)?hours-12:hours)timeValue+=((minutes<10)? ":0" : ":" )+minutes timeValue+=((seconds<10)? ":0" : ":" )+seconds timeValue+=(hours>=12)? " P.M." : " A.M." window.status=timeValue;timerID=setTimeout( "showtime()" ,1000);timerRunning= true }function startclock(){stopclock();showtime()} |
Трошки складніше...
Тепер відмітимо галочку "змінювати зміні":
1 | var timerID= null ;var timerRunning= false ;function stopclock(){ if (timerRunning)clearTimeout(timerID);timerRunning= false }function showtime(){var a= new Date();var b=a.getHours();var c=a.getMinutes();var d=a.getSeconds()var e= "" +((b>12)?b-12:b)e+=((c<10)? ":0" : ":" )+c e+=((d<10)? ":0" : ":" )+d e+=(b>=12)? " P.M." : " A.M." window.status=e;timerID=setTimeout( "showtime()" ,1000);timerRunning= true }function startclock(){stopclock();showtime()} |
Ще цікавіше...
І накінець виберемо "Base62 encode":
1 | eval(function(p,a,c,k,e,r){e=function(c){ return c.toString(a)}; if (! '' .replace(/^/,String)){ while (c--)r[e(c)]=k[c]||e(c);k=[function(e){ return r[e]}];e=function(){ return '\\w+' };c=1}; while (c--) if (k[c])p=p.replace( new RegExp( '\\b' +e(c)+ '\\b' , 'g' ),k[c]); return p}( '1 3=g;1 2=7;4 8(){h(2)i(3);2=7}4 5(){1 a=j k();1 b=a.l();1 c=a.m();1 d=a.n()1 e=""+((b>6)?b-6:b)e+=((c<9)?":0":":")+c e+=((d<9)?":0":":")+d e+=(b>=6)?" o.f.":" p.f."q.r=e;3=s("5()",t);2=u}4 v(){8();5()}' ,32,32, '|var|timerRunning|timerID|function|showtime|12|false|stopclock|10||||||M|null|if|clearTimeout|new|Date|getHours|getMinutes|getSeconds|P|A|window|status|setTimeout|1000|true|startclock' .split( '|' ),0,{})) |
Особливість даної опції, що наш код перетворився в динамічну створювану функцію, яка виконується за допомогою eval. Прочитати даний код надзвичайно важко. Що нам і треба!