J'ai cette fonction qui est importée directement dans le HTML
function include(filename){
var head = document.getElementsByTagName('head')[0];
script = document.createElement('script');
script.src = filename;
script.type = 'text/Javascript';
head.appendChild(script);
}
Et je veux l'utiliser pour importer mes autres JS par programmation comme ceci
function testRunner(){
include('Point.js');
include('Grid.js');
gridTest();
}
Les JS apparaissent dans le HTML dans la tête et ils ont l'air ok ...
Mais les autres JS ne peuvent pas le voir.
Pourquoi ?
5 réponses
Les scripts inclus sont chargés de manière asynchrone, de sorte que la fonction include()
retourne avant que le fichier de script ne soit entièrement chargé.
Vous devez passer un rappel pour l'événement onload du script:
function include(filename, cb){
var head = document.getElementsByTagName('head')[0];
script = document.createElement('script');
script.src = filename;
script.type = 'text/Javascript';
script.onload = cb;
head.appendChild(script);
}
Et puis chargez-le comme ceci:
function testRunner() {
include('Point.js', function() {
include('Grid.js', function() {
gridTest();
});
});
}
Bien sûr, utiliser un script existant pour le chargement dynamique de JavaScript serait beaucoup plus confortable, vous pourriez alors probablement faire quelque chose comme ceci:
require(['Point.js', 'Grid.js'], function() {
gridTest();
});
Jetez un œil à RequireJS: http://requirejs.org/
Pour apporter des fichiers js, je pense que vous devez le récupérer en tant qu'objets à mettre en cache et à utiliser.
function preFetchResources(url) {
var o = document.createElement('object');
o.data = url;
o.width = 0;
o.height = 0;
document.body.appendChild(o);
}
Cela prélira un js file
à partir de son url
et l'ajoutera dans le cache. Vous pouvez accéder à la bibliothèque à partir de là.
Vous devez vous assurer que les fichiers ont été chargés avant d'essayer de les utiliser. Essayez quelque chose comme:
function include(filename){
...
return true;
}
if (include("grid.js")){
testgrid();
}
Vous devez essayer ceci.
window.onload = function(){
var s = document.createElement('script');
s.src = 'YourScript.js';
document.getElementsByTagName('body')[0].appendChild(s);
}
C'est parce que d'autres JS sont déjà chargés lorsque vous chargez votre script. Vous devez utiliser la fonction de rappel.
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.