Senza usare un array globale non riesco.
Il seguente script è corretto, funziona bene, ma utilizza l'array globale "scripts".
Se mi sai dire come andrebbe scritta la funzione "findScript" senza l'uso di un array globale allora elimino "scripts".
html di test:codice:/** * * DESCRIPTION * * This script allows you to load the JavaScript scripts, * after checking that they are not already loaded. * * **************************************************************** * * EXAMPLE * * loadScript('./script_1.js'); * loadScript('./script_2.js','f2'); * loadScripts(new Array('./script_3.js','./script_4.js')); * loadScripts(new Array('./script_5.js','./script_6.js'), 'f6'); */ var scripts = new Array(); // array (list of script name) /** * Initialize "scripts" array. */ $(document).ready(function() { $('head > script').each(function(index, elt) { scripts.push($(elt).attr("src")); }); }); /** * If it is not already loaded, load a javascript script. * If the "callback" parameter is defined, executes "callback" after the script is loaded. * * @access : public * @param : [src] string (script name) * @param : [callback] string (optional: function string) */ function loadScript(src, callback) { if(findScript(src)) { if(callback != undefined) eval(callback+'();'); } else { scripts.push(src); $.getScript(src, function(data, textStatus) { if(callback != undefined) eval(callback+'();'); }); } } /** * If it are not already loaded, load a list of javascript scripts. * If the parameter "callback" is defined, after all scripts have been loaded execute "callback". * * @access : public * @param : [srcList] array (list of script name) * @param : [callback] string (optional: function name) */ function loadScripts(srcList, callback) { loadRecursive(srcList, callback, 0); } /** * If it are not already loaded, load a list of javascript scripts. * If the parameter "callback" is defined, after all scripts have been loaded execute "callback". * * @access : private * @param : [srcList] array (list of script name) * @param : [callback] string (optional: function name) * @param : [i] int (index of srcList) */ function loadRecursive(srcList, callback, i) { if(i == srcList.length) { if(callback != undefined) eval(callback+'();'); } else { if(findScript(srcList[i])) { loadRecursive(srcList,callback, i+1); } else { scripts.push(srcList[i]); $.getScript(srcList[i], function(data, textStatus) { loadRecursive(srcList,callback, i+1); }); } } } /** * Find a script in "scripts" global array. * * @access : private * @return : bool * @param : [src] string (script name) */ function findScript(src) { for(var i = 0; i < scripts.length; i++) if(scripts[i] == src) return true; return false; }
Tutti i file di test "script_N.js" contengono semplicemente:codice:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="lazy_loader.js"></script> </head> <body> <script type="text/javascript"> $(document).ready(function() { loadScript('./script_1.js'); loadScript('./script_2.js','f2'); loadScripts(new Array('./script_3.js','./script_4.js')); loadScripts(new Array('./script_5.js','./script_6.js'), 'f6'); }); </script> </body> </html>
codice:alert("caricato"); function fN() { alert("fN"); }

Rispondi quotando