Показать сообщение отдельно
  #1 (permalink)  
Старый 06.12.2012, 11:24
Новичок на форуме
Отправить личное сообщение для sonniksonnik Посмотреть профиль Найти все сообщения от sonniksonnik
 
Регистрация: 06.12.2012
Сообщений: 5

не могу понять принцип всего скрипта
Собственно, приветствую всех. Задали нам задачку, дан скрипт, нужно осмысленно объяснить его работу. Вроде кусочно что то могу объснить, а суть всего скрипта не ясна. Как не ломала голову, ну никак, даже тут пыталась отрабатывать скрипт http://jsfiddle.net/, а что то никак. Сам скрипт
window._$0 = window._$0 || {
  __ : []
}
;
_$0.Loader = function (obj){
  _$0.__$0 = function (data){
    data = _$0.unescpe(data);
    _$0.data = _$0.data || {
    }
    ;
    if (typeof _$0.data.ads !== 'undefined'){
      _$0.data.ads = _$0.data.ads.concat(data.ads)
    }
    else {
      _$0.data = data
    }
    if (_$0.data.frameUrl){
      var a = document.createElement('iframe');
      a.setAttribute('src', _$0.data.frameUrl);
      a.style.cssText = 'width:0px; height:0px; overflow:hidden; border:none;';
      document.getElementsByTagName('body')[0].appendChild(a)
    }
    for (var i = 0, l = _$0.data.ads.length; i < l; i += 1){
      var fName = _$0._.versions[_$0.data.ads[i].format];
      if (fName){
        _$0.Loader.instance.load(_$0._.scriptsDomain + fName)
      }
    }
    var i = setInterval(function (){
      if (typeof _$0.Common !== "undefined"){
        new _$0.Common();
        clearInterval(i)
      }
    }
    , 100);
    setTimeout(function (){
      clearInterval(i)
    }
    , 2000)
  }
  ;
  _$0.unescpe = function (input){
    return eval('(' + _$0.unescped(input) + ')')
  }
  ;
  _$0.utf8Decode = function (bytes){
    var chars = [], offset = 0, length = bytes.length, c, c2, c3;
    while (offset < length){
      c = bytes[offset];
      c2 = bytes[offset + 1];
      c3 = bytes[offset + 2];
      if (128 > c){
        chars.push(String.fromCharCode(c));
        offset += 1
      }
      else if (191 < c && c < 224){
        chars.push(String.fromCharCode(((c & 31) << 6) | (c2 & 63)));
        offset += 2
      }
      else {
        chars.push(String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)));
        offset += 3
      }
    }
    return chars.join('')
  }
  ;
  _$0.utf8Encode = function (string){
    string = string.replace(/\r\n/g, "\n");
    var utftext = "";
    for (var n = 0; n < string.length; n ++ ){
      var c = string.charCodeAt(n);
      if (c < 128){
        utftext += String.fromCharCode(c)
      }
      else if ((c > 127) && (c < 2048)){
        utftext += String.fromCharCode((c >> 6) | 192);
        utftext += String.fromCharCode((c & 63) | 128)
      }
      else {
        utftext += String.fromCharCode((c >> 12) | 224);
        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
        utftext += String.fromCharCode((c & 63) | 128)
      }
    }
    return utftext
  }
  ;
  _$0.chrTable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
  _$0.pad = '=';
  _$0.toescaped = function (input, r){
    var output = "", out = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;
    r &= 255;
    input = _$0.utf8Encode(input);
    for (var j = 0; j < input.length; out += String.fromCharCode(r ^ input.charCodeAt(j)), 
    j ++ ){
    }
    input = out;
    while (i < input.length){
      chr1 = input.charCodeAt(i ++ );
      chr2 = input.charCodeAt(i ++ );
      chr3 = input.charCodeAt(i ++ );
      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;
      if (isNaN(chr2)){
        enc3 = enc4 = 64
      }
      else if (isNaN(chr3)){
        enc4 = 64
      }
      output = output + _$0.chrTable.charAt(enc1) + _$0.chrTable.charAt(enc2) + _$0.
      chrTable.charAt(enc3) + _$0.chrTable.charAt(enc4)
    }
    return output
  }
  ;
  _$0.toescapeduri = function (uri){
    if (_$0.preview){
      return uri
    }
    var r = ( + new Date()) % 1000000;
    return "/?" + r + "=" + _$0.toescaped(uri.replace("/?", ""), r)
  }
  ;
  _$0.unescped = function (data){
    data = data.replace(/[\-]/g, "+").replace(/[_]/g, "/");
    var binTable = [ - 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1
     ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1
     ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1, 62 ,- 1 ,- 1 ,- 1, 63, 
    52, 53, 54, 55, 56, 57, 58, 59, 60, 61 ,- 1 ,- 1 ,- 1, 0 ,- 1 ,- 1 ,- 1, 0, 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 ,- 1 ,- 
    1 ,- 1 ,- 1 ,- 1 ,- 1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 
    42, 43, 44, 45, 46, 47, 48, 49, 50, 51 ,- 1 ,- 1 ,- 1 ,- 1 ,- 1];
    var value, code, idx = 0, bytes = [], leftbits = 0, leftdata = 0;
    for (idx = 0; idx < data.length; idx ++ ){
      code = data.charCodeAt(idx);
      value = binTable[code & 0x7F];
      if ( - 1 === value){
        console.log("Illegal characters (code=" + code + ") in position " + idx)
      }
      else {
        leftdata = (leftdata << 6) | value;
        leftbits += 6;
        if (leftbits >= 8){
          leftbits -= 8;
          if (_$0.pad !== data.charAt(idx)){
            bytes.push((leftdata >> leftbits) & 0xFF)
          }
          leftdata &= (1 << leftbits) - 1
        }
      }
    }
    return _$0.utf8Decode(bytes)
  }
  ;
  if (navigator.cookieEnabled){
    return this .init.call(this , arguments)
  }
}
;
_$0.Loader.prototype = {
  init : function (){
    this .applyParams();
    var json = document.createElement('script');
    var u = _$0._.rtUri.pop();
    json.src = _$0._.rotatorDomain + _$0.toescapeduri(u + this ._getReferer(u) + this .
    _getResolution());
    document.body.appendChild(json);
    this .load(_$0._.scriptsDomain + _$0._.versions['common'])
  }
  , applyParams : function (){
    var c = _$0.unescpe(_$0.__.pop());
    if (_$0._){
      _$0._.rtUri.push(c.rtUri)
    }
    else {
      _$0._ = c;
      _$0._.rtUri = [_$0._.rtUri]
    }
    if (_$0._.ukDomain && _$0._.ukUri){
      var img = document.createElement('img');
      img.src = _$0._.ukDomain + _$0.toescapeduri(_$0._.ukUri);
      img.style.cssText = "width:1px;height:1px;position:absolute;left:-10000px;";
      document.body.appendChild(img)
    }
  }
  , load : function (url){
    var scripts = document.getElementsByTagName('script'), count = 0;
    for (var i = 0, l = scripts.length; i < l; i += 1){
      if (scripts[i].src == url){
        count++;
        break 
      }
    }
    if (count == 0){
      var script = document.createElement('script');
      script.src = url;
      document.body.appendChild(script)
    }
  }
  , _getResolution : function (){
    var height = 0, width = 0;
    if (self.screen){
      width = screen.width;
      height = screen.height
    }
    else {
      if (self.java){
        var jkit = java.awt.Toolkit.getDefaultToolkit();
        var scrsize = jkit.getScreenSize();
        width = scrsize.width;
        height = scrsize.height
      }
    }
    return '&width=' + width + '&height=' + height
  }
  , _getReferer : function (u){
    if (document.referrer && u.indexOf('&ref=') ==- 1){
      return '&ref=' + encodeURIComponent(document.referrer)
    }
    return ''
  }
  , _findRival : function (){
    return false
  }
}
;

_$0.__.push('тут массив кодированный base64');

Собственно, прошу так скзать дать наводку, что делает скрипт, объясните пожалуйста каждую подпрограмму, если нетрудно.
Ответить с цитированием