Comment charger un fichier JavaScript d'un autre?

Comment chargez-vous un fichier JavaScript d'un autre fichier JavaScript, comme CSS? Dans CSS, nous utilisons write @import url("mycss.css"); .

Y a-t-il un moyen de le faire en JavaScript?

Oui. Si vous voulez en JavaScript pur, vous devez créer dynamiquement une étiquette de script et l'ajouter au document.

Oui. Si vous utilisez la bibliothèque jQuery, vous pouvez utiliser la méthode $.getScript .

 $.getScript("another_script.js"); 

Il n'y a pas de fonction / méthode import-ish en Javascript, mais vous pouvez simplement ajouter un script à la <head> comme suit:

 newScript = document.createElement('script'); newScript.type = 'text/javascript'; newScript.src = '/path/to/js/file'; document.getElementsByTagName('head')[0].appendChild(newScript); 

Ou comme Edgar a mentionné avant moi, vous pouvez utiliser jQuery.

Tout simplement parce que personne ne l'a mentionné encore, il existe une autre option, qui ne nécessite aucune bibliothèque de fantaisie ou un codage délicat, document.write . En principe, cela ressemblerait à ceci, bien que voici ci-dessous pour une mise en garde:

 document.write('<script src="myscript.js" type="text/javascript"></script>'); 

Cela sera exécuté lors de l'analyse complète de la balise du script, et si vous placez votre étiquette de script dans la tête, la nouvelle étiquette de script sera également dans la tête, juste après celle exécutée. Prenez soin de l'exécuter directement plutôt que lorsque le document a été chargé (comme dans un rappel $(function(){}) . C'est ce que j'utilise:

 (function(){ function load(script) { document.write('<'+'script src="'+script+'" type="text/javascript"><' + '/script>'); } load("script1.js"); load("script2.js"); load("etc.js"); })(); 

La fonction d'inclusion est juste là pour ne pas polluer l'espace de noms global.

La mise en garde (et pourquoi le «script» qui a été divisé ci-dessus) est qu'il peut y avoir des étiquettes de script de fin dans une balise de script, l'analyseur HTML ne sait pas que cela fait partie du script. Il y a une autre question sur ce sujet.

Le Javascript lui-même ne fournit aucune aide pour la modularisation autre que la capacité d' eval une chaîne. Mais il est assez commun que la plupart des grands frameworks javascript aient mis au point leurs propres solutions, et plus récemment, il a été fait un effort pour normaliser ces API dans le projet requirejs . Si vous utilisez un cadre comme Dojo ou jQuery, vous êtes probablement le meilleur après avoir appris à utiliser leurs installations, mais sinon, requirejs est un outil léger et autonome. Vous venez simplement d'ajouter

 <script data-main="scripts/main" src="scripts/require.js"></script> 

À votre section <head> , puis placez votre propre javascript dans un code wrapper comme celui-ci (volé du site require.js ):

 require(["helper/util"], function() { //This function is called when scripts/helper/util.js is loaded. require.ready(function() { //This function is called when the page is loaded //(the DOMContentLoaded event) and when all required //scripts are loaded. }); });