les bibliothèques d'amélioration.js onScriptEd en cours d'exécution avant que jQuery ne charge
-
30-09-2019 - |
Question
Voir cette démo du groupe de filament utilisant leur amélioration progressive améliorer.js bibliothèque
Modification pour donner: -
<script type="text/javascript" src="../_shared/EnhanceJS/enhance.js"></script>
<script type="text/javascript">
// Run capabilities test
enhance({
loadScripts: [
{src: 'js/excanvas.js', iecondition: 'all'},
'../_shared/jquery.min.js',
'js/visualize.jQuery.js',
'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
]
});
alert($);
</script>
J'obtiens une erreur "$ est non définie" sur l'alerte vraisemblablement parce que jQuery n'a pas encore chargé.
Remarque - L'alerte ($) est juste pour le débogage - j'essaie de faire quelque chose avec cette $ ('some-selector') - et pas de $ (gestionnaire) ou $ (document) .ready etc ne fonctionne pas non plus - JQuery n'est pas chargé, $ n'est pas défini.
améliorer surléné On dirait que ça devrait faire, il trompe mais si j'ajoute
onScriptsLoaded:[runMyCode()]
et ensuite
function runMyCode()
{
alert("runMyCode was called");
alert($);
}
La première alerte fonctionne mais $ n'est toujours pas défini.
Si j'appelle RunMycode sur un événement de clic d'un bouton, cela fonctionne.
La question est donc - comment pouvez-vous exécuter du code une fois que tous les scripts ont terminé le chargement avec améliorer.js?
Ps même problème vérifié dans ie8 / ff3 / chrome7
La solution
Je pense que c'est ce que vous recherchez, notez que onScriptsLoaded
est utilisé directement comme rappel, il devrait donc être une fonction, pas un tableau:
enhance({
loadScripts: [
{src: 'js/excanvas.js', iecondition: 'all'},
'../_shared/jquery.min.js',
'js/visualize.jQuery.js',
'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
],
onScriptsLoaded: function() { alert($); }
});
Ou plus généralement pour une fonction, passez juste la référence comme celle-ci:
onScriptsLoaded: runMyCode
La raison onScriptsLoaded:[runMyCode()]
"Le genre" fonctionne, c'est immédiatement invoquant le runMyCode
Fonction (à l'époque cette ligne s'exécute, ne pas Lorsque les scripts se terminent) et fabrique un tableau à partir de ce résultat. Cela lancera en fait une erreur lorsque les scripts termineront, car onScriptsLoaded
devrait être une fonction de rappel, pas un tableau.
Autres conseils
Je pense que cela peut être un problème:
onScriptsLoaded:[runMyCode()]
Avez-vous essayé (en supposant que la notation du tableau est correcte): (Éditer - c'est ne pas corriger)
onScriptsLoaded: [runMyCode]
? La première façon, vous appelez votre fonction au moment où vous configurez la bibliothèque. Vous voulez plutôt passer la référence à votre fonction.
Éditer En fait, il devrait être juste:
onScriptsLoaded: runMyCode
Je ne sais pas d'où vient le tableau; Il n'est certainement pas mentionné dans la documentation "Enhance.js".