Des instructions <script> synchrones?

J'utilise xmlhttprequest (et eval ) pour charger dynamiquement des scripts. Ensuite, j'évalue le script et je recherche s'il y a d'autres scripts à charger. Dans le cas où l'un des scripts cause et fait exception, le message d'erreur signalé indique le numéro de ligne associé à eval , et non l'erreur réelle dans le script.

Sur une autre question, il m'a été suggéré d'utiliser <script> pour améliorer les messages d'erreur. Malheureusement, <script> est asynchrone, et je ne pourrai pas contrôler l'ordre de chargement des scripts (j'ai besoin d'un rappel en charge).

Comment puis-je implémenter un comportement synchrone dans les commandes <script>


Plus d'informations sur ce que je souhaite atteindre

Chaque script possède une liste d'autres scripts qu'il charge, stockés dans une liste, on l'appelle _toLoad

Disons que nous avons un script 'Main.js' avec une liste de charge comme

_toLoad = [['A.js'] , ['B.js'] , ['C.js'] , ['D.js' , 'E.js' , 'F.js']]

Ce qui indique qu'une fois chargé, le fichier 'A.js' doit être chargé à la suite. Une fois 'A.js' chargé, 'B.js' doit être chargé ensuite. Une fois 'B.js' chargé, 'C.js' doit être chargé à la suite. Une fois que 'C.js' est chargé, 'D.js', 'E.js' et 'F.js' doivent être chargés, dans n'importe quel ordre.

Je pourrais utiliser <script> pour charger 'Main.js', évaluer sa liste _toLoad et commencer à charger les autres scripts, dans le bon ordre. Mais que se passe-t-il si 'A.js' a plusieurs scripts, il charge aussi? Je veux que ceux qui le chargent en arrière-plan, et ne pas retarder 'B.js' de chargement

Que faire si 'A.js' a une liste de charge comme ça:

_toLoad = [['A2.js'] , ['B2.js'] , ['C2.js'] , ['D2.js' , 'E2.js' , 'F2.js']]

Est-ce que je devrais passer et publier des instructions <script> pour ceux-ci. Cela semble être une première approche en profondeur, quand je veux d'abord une forme de largeur.

Une des questions liées a mentionné la définition de innerHTML de l'élément de l'étiquette de script. Je pense que cela pourrait faire l'affaire

 function load(toEval, callback){ __global_callback = callback; var node = document.createElement('script'); node.innerHTML = toEval + '; __global_callback()'; document.getElementsByTagName('head')[0].appendChild(node); } load("console.log('before...');", function(){ console.log('...and after'); });