130 votes

Comment ajouter <script</script> en JavaScript ?

J'ai besoin d'utiliser appendChild() ou jQuey's append() pour ajouter des <script> dans le document. D'après ce que je peux voir, ces éléments sont supprimés. Quelqu'un sait comment faire ?

1 votes

La deuxième réponse à cette question avec un vote de 67 est une très bonne réponse qui vous dira tout ce que vous devez savoir.

2 votes

Écrire simplement <script><\/script> au lieu de <script></script>

271voto

Dennis Points 6145
// Create the element

var script = document.createElement("script");

// Add script content

script.innerHTML = "...";

// Append

document.head.appendChild(script);

Ou

document.body.appendChild(script);

28 votes

Plus un en raison de la mise en œuvre native

3 votes

Et cela devrait être une réponse acceptée. La réponse acceptée actuellement ne permet pas de charger jQuery de cette façon.

2 votes

Je n'utiliserais pas innerHTML mais script.src

156voto

Sapan Diwakar Points 3184

Essayez ça :

var s = document.createElement("script");
s.type = "text/javascript";
s.src = "http://somedomain.com/somescript";
$("head").append(s);

Notez que le script sera chargé et que vous pourrez accéder aux variables qu'il contient, mais que vous ne verrez pas l'image réelle de l'utilisateur. <script> dans le DOM.

9 votes

Inspecter l'élément et vous verrez

6 votes

Cette méthode génère un avertissement indiquant que le chargement synchrone des scripts est préjudiciable à l'expérience utilisateur. En supposant que vous allez vouloir appeler quelque chose dans ce javascript que vous chargez, il devrait être chargé de manière asynchrone et une méthode de callback employée pour exécuter votre code qui dépend du nouveau scripts. stackoverflow.com/questions/7718935/

0 votes

Vous pouvez définir async à true.

53voto

qwertymk Points 9783
$('<script>alert("hi");</' + 'script>').appendTo(document.body);

DEMO

0 votes

Cool mais comment ça marche ? Je connais cette correction depuis environ un an et je n'en ai toujours aucune idée.

20 votes

La seule raison pour laquelle vous ne pouvez pas faire $('<script></script>') c'est parce que la chaîne </script> n'est pas autorisé en javascript parce que la couche DOM ne peut pas analyser ce qui est js et ce qui est html. Vous pouvez même faire $('<script><\/script>') pour contourner cette limitation

0 votes

Joli ! Merci pour l'information.

32voto

Nicola Peluchetti Points 38948

Si vous devez ajouter un script pour qu'il soit analysé, vous pouvez faire comme Google pour son bouton +1.

  (function() {
    var po = document.createElement('script');
    po.type = 'text/javascript';
    po.async = true;
    po.src = 'link to your script here';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(po, s);
  })();

0 votes

Joliment fait... où devez-vous placer cet appel de fonction ? cela a-t-il de l'importance ? head body

0 votes

Non, ça devrait être dans le domaine seulement... Juste ça...

0 votes

Ce code se plantera (s est indéfini) si vous n'avez pas de balise script dans votre HTML (exemple : <!DOCTYPE html><title>Hello, World!</title> - c'est du HTML valide)

25voto

Suganya Points 426

Cela a marché pour moi

<script>
    $('head').append("<script>your script content here<\/script>");
</script>

Notez que le "/" de l'intérieur </script> s'est échappé pour être "<\/script>" . S'il ne l'est pas, il ferme en fait l'accès à l'extérieur. <script> étiquette.

Le script ajouté ne sera pas visible mais sera exécuté. J'espère que cela vous aidera.

0 votes

J'ai essayé toutes les autres méthodes avec mon script, mais c'est la seule méthode qui a fonctionné ! Merci beaucoup !

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