2010-07-05 5 views
0

J'essaie d'inclure dynamiquement des fichiers js (et css) dans une page Web comme ceci: index.html -> loader_a.js -> a_foo.js, a_bar.js, a_foo.css et ainsi de suite.
Bien que cela fonctionne sans problème dans FF (en utilisant appendChild) je ne peux pas le faire fonctionner dans IE6. J'ai essayé différentes solutions disponibles (ajout de dom, ajax call et eval et plus de (http://ntt.cc/2008/02/10/4-ways-to-dynamically-load-external-javascriptwith-source.html) ici et there et d'autres comme post # 2013676) mais ça ne fait pas ce que c'est censé faire. Quand je vérifie avec DebugBar je vois que mes fichiers d'inclusion (par exemple a_foo.js) sont effectivement chargés, mais son contenu est vide - sur d'autres fichiers inclus (1 niveau/directement) ce contenu est show donc je suppose qu'il y a le problème ...Dynamique (2 niveaux) Javascript/CSS Chargement IE6

Le "erreur" que je reçois est toujours un objet indéfini qui est o/cb/c la fonction que j'appelle n'est pas chargée correctement donc pas beaucoup d'aide. Je ne reçois aucune erreur sur les inclusions.
J'ai validé les javascripts pour que ceux-ci soient corrects.

Quelqu'un at-il la solution ultime pour cela? Je peux recréer mes tests et poster du code si ça aide.

Merci, salutations, Thomas

Exemple HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML lang=en><HEAD><TITLE>Test</TITLE> 

<script type="text/javascript" src="mmtest_files/jquery-1.4.2.min.js"></script> 

<script type="text/javascript" src="mmtest_files/multiload.js"></script> 
<script type="text/javascript" > 

function init2() { 
    // using the data from the loaded js files 
    var a= mmf("a"); 
    document.getElementById('status').innerHTML = "Variable set:" + a; 

} 

// magic... 
include(['mmt.js'],init2); 

</script> 

<BODY > 

<H2>Test me!</H2> 
<SPAN id=status>status old</SPAN> 

</BODY></HTML> 

JS 1 est MultiLoad de réponse 1

JS2 est un test comprend:

fonction MMF (param { return "Appelé avec" + param; }

Répondre

1

Vous devez utiliser document.write dans ie, afin de charger des scripts en parallèle.

Voir: Loading Scripts Without Blocking

J'ai un tel script BTW: Loading Multiple Javascript Files In Order Asynchronously

(il peut avoir besoin des enchancements dans Chrome)


MISE À JOUR

Il y a un rappel fonction, il est facultatif. Il peut être utilisé pour coupler un script dépendant aux fichiers. EG:

function myjQueryCode() { 
    // ... 
} 

include(['jquery.js','jquery-ui.js'], myjQueryCode); 

Pour que votre code dépendant jquery s'exécute après le chargement des fichiers.

+0

Je vais essayer - mais j'ai quelques questions/commentaires tout de suite: L'URL js dans le code source de votre site (http://galambalazs.extra.hu/multiload/multiload.js) ne fonctionne pas plus (doit être galambalazs.fw.hu). Ensuite, vous vérifiez pour "typeof callback ===" fucntion "" - est prévu fucntion et pourquoi? Enfin, le script est-il dépendant de WebKit ou fonctionnera-t-il sans? (WebKit/i.test (navigator.userAgent)) – trottig

+0

Oui, le lien pointe vers l'ancienne version, mais vous pouvez voir la source du code.Le hack du webkit est quelque chose que je vais prendre en compte, c'est une solution temporaire. Et oui, cela fonctionne cross-browser. A propos du rappel, j'ai mis à jour ma réponse. – galambalazs

+0

oh maintenant je vois, j'ai mal tapé le 'typeof callback ===" fonction "' partie. ce n'est pas prévu. Je vais le mettre à jour tout de suite. – galambalazs

Questions connexes