J'ai un très gros fichier javascript que je voudrais charger uniquement si l'utilisateur clique sur un certain bouton. J'utilise jQuery comme framework. Existe-t-il une méthode intégrée ou un plugin qui m'aidera à le faire?
Un peu plus de détails: j'ai un bouton "Ajouter un commentaire" qui devrait charger le fichier javascript TinyMCE (j'ai fait bouillir tous les trucs TinyMCE en un seul fichier JS), puis appelez tinyMCE.init (...).
Je ne veux pas charger ceci au chargement initial de la page car tout le monde ne cliquera pas sur "Ajouter un commentaire".
Je comprends que je peux simplement faire:
$("#addComment").click(function(e) { document.write("<script...") });
mais y a-t-il un meilleur moyen / encapsulé?
javascript
jquery
jquery-plugins
tinymce
lazy-loading
Jeff Meatball Yang
la source
la source
Réponses:
Oui, utilisez getScript au lieu de document.write - cela permettra même un rappel une fois le fichier chargé.
Vous voudrez peut-être vérifier si TinyMCE est défini, cependant, avant de l'inclure (pour les appels ultérieurs à `` Ajouter un commentaire '') afin que le code ressemble à ceci:
En supposant que vous n'ayez à appeler
init
qu'une seule fois, c'est. Sinon, vous pouvez le découvrir à partir d'ici :)la source
Je me rends compte que je suis un peu en retard ici, (environ 5 ans), mais je pense qu'il y a une meilleure réponse que celle acceptée comme suit:
La
getScript()
fonction empêche en fait la mise en cache du navigateur . Si vous exécutez une trace, vous verrez que le script est chargé avec une URL qui inclut un paramètre d'horodatage:Si un utilisateur clique sur le
#addComment
lien plusieurs fois,tinymce.js
sera rechargé à partir d'une URL horodatée différemment. Cela va à l'encontre de l'objectif de la mise en cache du navigateur.===
Sinon, dans la
getScript()
documentation, il existe un exemple de code qui montre comment activer la mise en cache en créant unecachedScript()
fonction personnalisée comme suit:===
Ou, si vous souhaitez désactiver la mise en cache globalement, vous pouvez le faire
ajaxSetup()
comme suit:la source
$.getScript({url: "test.js",cache:true})