J'ai des problèmes pour que cela fonctionne. J'ai d'abord essayé de définir mes balises de script en tant que chaînes, puis d'utiliser jquery replaceWith () pour les ajouter au document après le chargement de la page:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Mais j'ai eu des erreurs littérales de chaîne sur ce var. J'ai ensuite essayé d'encoder la chaîne comme:
var a = '&left;script type="text/javascript">some script here<\/script>';
mais envoyer cela aux replaceWith()
sorties juste cette chaîne au navigateur.
Quelqu'un peut-il me dire comment vous feriez pour ajouter dynamiquement une <script>
balise dans le navigateur après le chargement de la page, idéalement via jQuery?
<script>
balise au document?eval()
fonction. Mais l'utilisation deeval()
suggère presque toujours qu'il existe une meilleure façon de faire ce que vous essayez de faire.document.write
et que vous l'appelez après le chargement de la page, il détruira la page.<iframe>
éléments? Vous pouvez différer la définition de l'<iframe>
URL jusqu'à ce que vous soyez prêt.Réponses:
Vous pouvez placer le script dans un fichier séparé, puis l'utiliser
$.getScript
pour le charger et l'exécuter.Exemple:
la source
$.getScript
va juste charger un fichier .js via AJAX et l'exécuter. Le script n'a pas besoin d'être dans le DOM pour pouvoir accéder à un div sur votre page.$.getScript()
le script devra être sur le même domaine ou le domaine distant et le navigateur devront prendre en chargeCORS
.$.ajax
notes: "Les requêtes de script et JSONP ne sont pas soumises aux mêmes restrictions de politique d'origine." source . En d'autres termes,$.getScript
peut extraire des fichiers .js d'autres domaines, pas seulement les vôtres .Essayez ce qui suit:
http://api.jquery.com/append
la source
append
pour ajouter un script. Append provoque même une évaluation immédiate du script en ligne (exactement ce dont j'avais besoin). MerciVoici la bonne façon de le faire avec JQuery moderne (2014):
ou si vous voulez vraiment remplacer un div, vous pouvez faire:
la source
Un moyen plus simple est:
Vous pouvez également utiliser ce formulaire pour charger des css.
la source
</script>
dans votre source car cela peut causer des problèmes d'analyse: stackoverflow.com/questions/236073/…/
fait l'affaire pour moi:$('head').append('<script src="your.js"><\/script>');
Cette réponse est techniquement similaire ou égale à ce que jcoffland a répondu. Je viens d'ajouter une requête pour détecter si un script est déjà présent ou non. J'en ai besoin car je travaille dans un site intranet avec quelques modules, dont certains partagent des scripts ou apportent les leurs, mais ces scripts n'ont pas besoin d'être chargés à chaque fois. J'utilise cet extrait depuis plus d'un an dans un environnement de production, cela fonctionne comme un charme. Commentant à moi-même: Oui je sais, il serait plus correct de demander si une fonction existe ... :-)
la source
Il existe une solution de contournement qui ressemble plus à un hack et je suis d'accord que ce n'est pas la façon la plus élégante de le faire, mais fonctionne à 100%:
Dites que votre réponse AJAX est quelque chose comme
Notez que j'ai sauté la balise de fermeture exprès. Ensuite, dans le script qui charge ce qui précède, procédez comme suit:
Ne me demandez pas pourquoi :-) C'est l'une de ces choses auxquelles je suis arrivé à la suite d'essais désespérés presque aléatoires et d'échecs.
Je n'ai pas de suggestions complètes sur son fonctionnement, mais il est intéressant de noter que cela ne fonctionnera PAS si vous ajoutez la balise de fermeture sur une ligne.
Dans des moments comme ceux-ci, j'ai l'impression d'avoir réussi à diviser par zéro.
la source
<\/script>
serait valide cependantExemple:
Cela devrait marcher. Je l'ai essayé; même résultat. Mais quand j'ai utilisé ceci:
Cela a fonctionné pour moi.
Edit: j'ai oublié le
#someelement
(btw je pourrais vouloir utiliser à#someElement
cause des conventions)La chose la plus importante ici est le + = donc le html est ajouté et non remplacé.
Laissez un commentaire si cela n'a pas fonctionné. J'aimerais vous aider!
la source
Voici un moyen beaucoup plus clair - pas besoin de jQuery - qui ajoute un script comme dernier enfant de
<body>
:Mais si vous souhaitez ajouter et charger des scripts, utilisez la méthode de Rocket Hazmat .
la source
Si vous essayez d'exécuter du JavaScript généré dynamiquement, vous seriez légèrement mieux en utilisant
eval
. Cependant, JavaScript est un langage tellement dynamique que vous ne devriez vraiment pas en avoir besoin.Si le script est statique, alors la
getScript
suggestion de Rocket est la voie à suivre.la source