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 ?

3
Cristiano Fontes 13 déc. 2011 à 15:33

5 réponses

Meilleure réponse

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/

7
ThiefMaster 13 déc. 2011 à 11:51

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à.

-1
Kris 13 déc. 2011 à 11:41

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();
}
-1
graphicdivine 13 déc. 2011 à 11:39

Vous devez essayer ceci.

window.onload = function(){ 
var s = document.createElement('script'); 
s.src = 'YourScript.js'; 
document.getElementsByTagName('body')[0].appendChild(s); 
}
0
Ahmet Can Güven 13 déc. 2011 à 11:37

C'est parce que d'autres JS sont déjà chargés lorsque vous chargez votre script. Vous devez utiliser la fonction de rappel.

1
Nick Shvelidze 13 déc. 2011 à 11:37
8488486