Показать сообщение отдельно
  #4 (permalink)  
Старый 09.01.2013, 21:56
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

devote помоему чересчур замороченно
попробывал покороче и попроще сделать.
проверено хром, опера, ie.

код
$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();
    }
})();


использование
$Load(["test.js","test2.js","test.js","test.js"],function(){ 
   alert("result");
});
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 09.01.2013 в 23:49.
Ответить с цитированием