115 votes

Comment insérer dynamiquement un <script> tag via jQuery after page load?

Je vais avoir des problèmes pour obtenir que cela fonctionne. J'ai d'abord essayé la configuration de mon balises de script comme des chaînes de caractères, puis à l'aide de jquery remplaceavec() pour ajouter au document après chargement de la page:

var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);

Mais j'ai eu un littéral de chaîne erreurs sur var. J'ai ensuite essayé de codage de la chaîne comme ceci:

var a = '&left;script type="text/javascript"&gt;some script here&lt;\/script&gt;';

mais l'envoi que d' replaceWith() sorties juste que la chaîne du navigateur.

Quelqu'un peut s'il vous plaît laissez-moi savoir comment vous allez sur ajouter dynamiquement un <script> balise dans le navigateur après le chargement de la page, idéalement via jQuery?

108voto

Rocket Hazmat Points 87407

Vous pouvez placer le script dans un fichier séparé, puis utiliser $.getScript pour le charger et l'exécuter.

Exemple:

 $.getScript("test.js", function(){
    alert("Running test.js");
});
 

72voto

BassemDy Points 1522

Essayez ce qui suit:

 <script type="text/javascript">
// Use any event to append the code
$(document).ready(function() 
{
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.src = "http://scriptlocation/das.js";
    // Use any selector
    $("head").append(s);
});
 

Crédits: texte du lien

premier commentaire.

1voto

Ash Points 88

Il existe une solution de contournement qui ressemble plus à un hack et je suis d'accord ce n'est pas la façon la plus élégante de le faire, mais fonctionne à 100%:

Dire votre AJAX réponse est quelque chose comme

<b>some html</b>
<script>alert("and some javscript")

Notez que j'ai sauté la balise de fermeture sur le but. Ensuite dans le script de chargement ci-dessus, effectuez les opérations suivantes:

$.ajax({
    url: "path/to/return/the-above-js+html.php",
    success: function(newhtml){
        newhtml += "<";
        newhtml += "/script>";
        $("head").append(newhtml);
    }
});

Juste ne me demandez pas pourquoi :-) C'est une de ces choses que je suis venu à la suite de desperate presque aléatoire essais et échoue.

J'ai pas de suggestions sur la façon dont cela fonctionne, mais curieusement, il ne fonctionnera PAS si vous ajoutez la balise de fermeture en une seule ligne.

Dans ces moments-là, je me sens comme j'ai été divisé par zéro.

-4voto

Magnar Points 15142

Si vous essayez d’exécuter du javascript généré dynamiquement, utilisez légèrement eval . Cependant, JavaScript est un langage tellement dynamique que vous ne devriez vraiment pas en avoir besoin.

Si le script est statique, alors la suggestion getScript Rocket est la voie à suivre.

-5voto

kikim Points 2

c'est des travaux>

 $('#someelement).replaceWith('<script> your script');
 

ne mettez pas </script> à la fin de votre script

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X