Je crée un widget externe qui utilise jQuery et plutôt que de l’inclure séparément, j’aimerais vérifier s’il est chargé et le charger dynamicment si ce n’est pas le cas.
Le problème est que je dois attendre le chargement du script pour exécuter le rest du script, ce qui nécessite des gestionnaires d’événements que IE et FF / Chrome gèrent différemment.
Si je le fais, cela fonctionne bien dans IE8:
This is a test.
- Jquery Scroll doit tirer plus souvent
- Google Chrome – désactiver le zoom par pincement
- Chrome change de style après l’actualisation et le corrige lorsque je fais un clic droit pour l’inspecter
- Les événements de clic ne fonctionnent pas dans Chrome, mais ils sont déclenchés lorsque nous l’exécutons manuellement à partir de la console.
- INDEX_SIZE_ERR lorsque vous cliquez sur un lien avec jQuery très basique dans Chrome
if (typeof jQuery == 'undefined') { s = document.createElement("script"); s.src = "//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"; if (s.addEventListener) { s.addEventListener("load", runScript, false); } else if (s.readyState) { s.onreadystatechange = runScript; } } else { runScript(); } function runScript() { document.getElementsByTagName('head')[0].appendChild(s); $('#test').css('font-size', '50px'); }
Mais cela ne fonctionne pas dans Chrome. Cependant, si j’ajoute le script précédemment, cela fonctionne dans Chrome mais pas dans IE:
This is a test.
if (typeof jQuery == 'undefined') { s = document.createElement("script"); s.src = "//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"; document.getElementsByTagName('head')[0].appendChild(s); if (s.addEventListener) { s.addEventListener("load", runScript, false); } else if (s.readyState) { s.onreadystatechange = runScript; } } else { runScript(); } function runScript() { $('#test').css('font-size', '50px'); }
Des idées sur la façon de charger dynamicment jQuery avec des gestionnaires d’événements fonctionnant à la fois dans IE et Chrome?
EDIT: La cible appendChild est passée de test à head.
Dans le premier code, vous ajoutez le script à la fonction que vous appelez une fois l’opération terminée!
Et quel élément est test?
document.getElementsByTagName('test')[0].appendChild(s); <-- looking for element <-- test is an id
Le code devrait ressembler à
if (typeof jQuery == 'undefined') { var s = document.createElement("script"); s.src = "//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"; if (s.addEventListener) { s.addEventListener("load", runScript, false); } else if (s.readyState) { s.onreadystatechange = runScript; } document.getElementsByTagName('head')[0].appendChild(s); } else { runScript(); } function runScript() { $('#test').css('font-size', '50px'); }
Exemple en cours d'exécution: http://jsfiddle.net/5986T/