Компресор JavaScript
Відомо, що JavaScript код завжди доступний разом з HTML. По цій причині захистити даний код (якщо така необхідність існує) доволі важко. Виходить, що розробивши чудовий AJAX-ефект і виклавши його на сайті, автор свідомо віддає його всім у довічне користування. Що робити?
Дану проблему частково можна вирішити за допомогою JavaScript компресора. За його допомогою "декодування" JavaScript коду стану справжнім випробуванням...
Розглянемо деякий скрипт:
// 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(); }
Ось що з ним буде після "обробки":
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()}
Трошки складніше...
Тепер відмітимо галочку "змінювати зміні":
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":
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. Прочитати даний код надзвичайно важко. Що нам і треба!