Inclure un fichier js dans un autre fichier js
Normalement, il n’est pas possible d’appeller un fichier js avec du javascript, il faut passer par le html, mais certains on trouver de petites astuces pour régler ce problème.
CyrilCS utilise le code suivant pour inclure des fichiers js, selon certains, ça ne fonctionne pas sur tous les navigateurs parfaitement, je n’ai pas encore eu le temps de le vérifier :
var CSLib = {}; CSLib.jsLoader = { jsDirectory: 'js/', jsFileExtension: 'js?', load : function(fileName, options) { if (typeof(fileName) == 'object') { for (s in fileName) if (typeof(fileNames) == 'string') CSLib.jsLoader.load(fileNames,options); return; } if (this.loadedfileName || this.loadingfileName) return; var head = document.getElementsByTagName('head')0; var script = document.createElement('script'); script.src = this.jsDirectory + fileName + '.' + this.jsFileExtension + '&jsFileName=' + fileName; script.type = 'text/javascript'; head.appendChild(script); with (CSLib.jsLoader) { options = options || {}; var emptyFunction = function(){}; _beginLoadingfileName = (options.beginLoading || emptyFunction); _endLoadingfileName = (options.endLoading || emptyFunction ); CSLib.jsLoader.beginLoadingfileName = function(e) { loadingfileName = true; _beginLoadingfileName(e); }; CSLib.jsLoader.endLoadingfileName = function(e) { loadingfileName = false; loadedfileName = true; _endLoadingfileName(e); }; beginLoadingfileName(fileName); } }, loading : {}, loaded : {}, _beginLoading: function(){}, _endLoading: function(){}, beginLoading: function(){}, endLoading: function(){} }CSLib.jsLoader.load('prototype','builder','effects','csmarried', { beginLoading: function(e){alert('fichier ' + e + ' en cours de chargement'}, endLoading: function(e){alert('fichier' + e + 'chargé')} });
regardons maintenant le code jcfr qui utilise AJAX :
var FileLoader = {}; FileLoader = { ErrorType : 0, Response : '', Result : 0, GetContents : function() { return((FileLoader.Result > 0 && FileLoader.Response != null) ? FileLoader.Response : ''); }, ScriptExec : function() { if(FileLoader.Result > 0 && FileLoader.Response != null) { setTimeout(FileLoader.Response, 0); return(true); } else { return(false); } }, Load : function (url, callb) { var xhr; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } else { throw new Error("XMLHttpRequest non supporté"); } if(xhr == null) throw new Error("XMLHttpRequest non supporté"); xhr.open("GET", url, true); xhr.onreadystatechange = function () { r_status = ''; r_readyState = ''; try { r_status = xhr.status; r_readyState = xhr.readyState; } catch(e) {} if (r_readyState == 4 && r_status == 200) { FileLoader.ErrorType = 200; FileLoader.Response = xhr.responseText; FileLoader.Result = 1; if(callb.Loaded != null) callb.Loaded(url); return xhr.responseText; } else { if(r_status != null) { FileLoader.ErrorType = r_status; FileLoader.Response = ''; FileLoader.Result = -1; if(callb.OnError != null) callb.OnError(url); } else { FileLoader.ErrorType = 0; FileLoader.Response = 0; FileLoader.Result = 0; if(callb.Loading != null) callb.Loading(url); } } }; xhr.send(null); }, OnError : function(){}, OnLoad : function(){}, Loaded : function(){} }
Voici un exemple :
resultat = FileLoader.Load( 'test.js', { OnError: function(e) { alert('Erreur de chargement de '+e+'') }, OnLoad: function(e) { alert('Chargement de '+e+' en cours...') }, Loaded: function(e) { alert('Chargement de '+e+' terminé') } } ); // Fichier recupéré FileLoader.ScriptExec(); // On peut l'éxécuter si c'est du Javascript alert(FileLoader.GetContents()); // Ou on peut l'utiliser à autre chose...
sur ibilab, un autre script :
function include(fichier) { try { SCRIPT = document.createElement("script"); SCRIPT.type = "text/javascript"; SCRIPT.src = fichier; HEAD = document.getElementsByTagName("head"); HEAD0.appendChild(SCRIPT); } catch(e) { document.write('$lt;script type="text/javascript" src="' + fichier + '"><\/script>'); } }
Pour aller plus loin, ils écrivent le code suivant :
function include(fichier) { // Si notre variable globale (rattachée à l'objet window) // n'existe pas, on la créée. if(window.includeFiles == undefined) { window.includeFiles = new Array(); } try { SCRIPT = document.createElement("script"); SCRIPT.type = "text/javascript"; SCRIPT.src = fichier; HEAD = document.getElementsByTagName("head"); HEAD0.appendChild(SCRIPT); window.includeFiles.puch(fichier); } catch(e) { document.write('$lt;script type="text/javascript" src="' + fichier + '"><\/script>'); window.includeFiles.puch(fichier); } }
function include_once(fichier) { if(window.includeFiles == undefined) { window.includeFiles = new Array(); } else { nbr = window.includeFiles.length for(i=0; i < nbr; i++) { if(window.includeFilesi == fichier) return false; } } include(fichier); return true; }
Les liens importants :
– forum.alsacreations.com
– ibilab.net