J'essaie d'ajouter dynamiquement un script à mon projet à l'aide de jQuery. Le script est correctement ajouté à la balise head mais le contenu n'est pas rendu dans la balise body.

Voici mon code:

  <script type="text/javascript">
    window.onload = function() {
        var s = document.createElement("script");
        s.type = "text/javascript";
        s.src = "https://form.jotform.com/jsform/81003857231348";
        $("head").append(s);
    }
  </script>

Cependant le script se charge avec succès si je l'ajoute directement:
<script type="text/javascript" src="https://form.jotform.com/jsform/81003857231348"></script>

https://jsfiddle.net/xpvt214o/98587/

Suis-je en train de manquer quelque chose?

0
Valip 11 avril 2018 à 15:36

3 réponses

Meilleure réponse

J'ai trouvé la solution,

Tout d'abord, vous ne pouvez rien écrire dans un document à partir d'un script externe chargé,

Impossible d'exécuter 'écriture' sur 'Document': Il n'est pas possible d'écrire dans un document à partir d'un script externe chargé de manière asynchrone à moins qu'il ne soit ouvert explicitement

Il existe deux façons de résoudre ce problème.

1).

Vous créez Iframe en tant que contenu html et écrivez dans le document en tant que

document.write(htmlCode)

Au-dessus de la ligne, créer un problème de chargement dynamique de votre contenu.

Au lieu de votre code, essayez quelque chose comme ci-dessous.

var htmlCode = document.createElement("iframe");
 htmlCode.setAttribute("title", title.replace(/[\\"']/g,'\\$&').replace(/&amp;/g,'&'));
 htmlCode.setAttribute("src","");
 htmlCode.setAttribute("allowtransparency","true");
 htmlCode.setAttribute("allow","geolocation; microphone; camera");
 htmlCode.setAttribute("allowfullscreen","true");
 htmlCode.setAttribute("name",this.formId);
 htmlCode.setAttribute("id",this.iframeDomId);

 document.body.appendChild(htmlCode);

Et ajoutez le code Js suivant dans votre html

<script type="text/javascript">
   var s = document.createElement("script");
   s.type = "text/javascript";
    s.src = "https://form.jotform.com/jsform/81003857231348";
   document.getElementsByTagName("head")[0].appendChild(s);
</script>

2).

Au lieu de

document.write(htmlCode)

Essayer

document.body.innerHTML=htmlCode

Faites-moi savoir si vous rencontrez toujours des problèmes.

2
Alpesh Jikadra 12 avril 2018 à 05:19

Essayez d'utiliser

window.onload = function() {
   //your script declaration here
}

Au lieu de jquery ready()

0
oma 11 avril 2018 à 12:41

Vous pouvez charger et exécuter un script avec jQuerys getScript (). Il n'a pas besoin d'être dans le DOM pour avoir accès à vos éléments.

$.getScript ("test.js", function (){

    alert ("Running test.js");

});
0
wayneOS 11 avril 2018 à 12:54