Показать сообщение отдельно
  #6 (permalink)  
Старый 10.01.2013, 00:16
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну и плюс ко всему такой код читать тяжело:
...
    function event(el,event,fn) {
         if (el.readyState=="complete") return fn();    
         var count= (event=="readystatechange") ? 2:1;
         if ( el.addEventListener) el.addEventListener (event, fn ,false)
         else el.attachEvent("on"+event, function(){ count--; if (count==0) fn() } );
    }
...

А если его привести в читаемый вид, то не многим меньше он станет:
$Load = (function() {
    var loadedScripts = {},//только загруженные скрипты
        allscript={};//все скрипты
 
    //хелпер для установки обработчиков событий
    function event(el, event, fn) {
        if (el.readyState == "complete") {
            return fn();
        }

        var count = (event == "readystatechange") ? 2 : 1;

        if (el.addEventListener) {
            el.addEventListener(event, fn ,false);
        } else {
            el.attachEvent("on" + event, function(){
                count--;
                if (count == 0) {
                    fn();
                }
            });
        }
    }

    //грузит скрипт и вешает событие load
    function loadAsync(src, callback) {
        setTimeout(function() {
            if (!(src in allscript)) {
                var script = document.createElement('script');
                script.type = 'text/javascript';
                script.src = src;
                document.documentElement.firstChild.appendChild(script);           
                allscript[src] = script;
            }
            event(allscript[src], '\v' != 'v' ? 'load' : "readystatechange", function() {
                callback(src, script);
            });
        }, 1);
    }
 
    //возвращаем функцию
    return function (scripts, onload) {
        var scripts = typeof scripts === "string" ? [scripts] : scripts,
            count = scripts.length;
 
        for(var i = 0; i < scripts.length; i++) {
            if (scripts[i] in loadedScripts) {
                count--;
            } else {
                loadAsync(scripts[i], function(src, script){         
                    loadedScripts[src] = script;
                    count--;
                    if (count == 0) {
                        onload();
                    }
                });
            }
        }

        if (count == 0) {
            onload();
        }
    }
})();

Плюс таймеры это излишек,

плюс проверка: (event == "readystatechange") ? 2 : 1;
совсем не правильно, ибо гарантии нет что отработает именно два раза

плюс условие '\v' != 'v'
это вообще из разряда идиотизма, ибо код написанный с использованием багов браузера, может привести к неожиданным последствиям. Такое нужно использовать только в крайней необходимости. Ибо при эмуляции того же ИЕ8 в ИЕ9 не факт что проявится это баг, хотя я и не проверял.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием