Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1008 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Inserer des <script></script> par innerHTML ??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Inserer des <script></script> par innerHTML ??

n°1388982
Ricco
Retour au pays
Posté le 16-06-2006 à 13:54:46  profilanswer
 

Salut,
 
Je voudrais rafraichir le contenu d'un div par ajax et innerHTML.
 
Le code de la page que je récupère par ajax est de la forme  
 

Code :
  1. <script type="text/javascript">
  2. function highlight(){...}
  3. </script>
  4. <style type="text/css">...</style>
  5. <div class="case" onClick="highlight();"><div>


 
C'est sale, les <script> ne sont pas dans le head mais en même temps je n'y ai pas accès ... Cela fonctionne dans une autre page du site affichant directement ce contenu. Par contre ça ne fonctionne pas quand j'ajoute ce code html par innerHTML.
 
Enfait l'html est bien reconnu, comme le css mais par contre les fonctions définit dans les balise script ne sont pas prises en compte.
 
Dans firefox (et l'extention webdevelopper) je regarde le contenu de la page html généré après l'appel ajax et je vois que la partie script a disparue. Le css reste, la suite du html aussi mais la partie script saute lors de l'insertion par innerHTML;  
 
Est-ce un problème connu ? Y'a-t-il une parade ?  


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
mood
Publicité
Posté le 16-06-2006 à 13:54:46  profilanswer
 

n°1389018
Ricco
Retour au pays
Posté le 16-06-2006 à 14:26:52  profilanswer
 

Autrement dit  
 

Code :
  1. <html>
  2. <body>
  3. <div id="toto">
  4. <script type="text/javascript">function test(){ alert('test');}</script>
  5. <a href="#" onClick="test();" > Ajout </a>
  6. </div>
  7. </body>
  8. <html>


fonctionne mais pas  
 

Code :
  1. <html>
  2. <body>
  3. <a href="#" onClick="document.getElementById('toto').innerHTML = '<script type=\'text/javascript\'>function test(){ alert(\'test\');}</script> <a href=\'#\' onClick=\'test();\' > Ajout </a> ';return false;">Click ICI</a>
  4. <div id=toto ></div>
  5. </body>
  6. <html>


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1389035
Hermes le ​Messager
Breton Quiétiste
Posté le 16-06-2006 à 14:41:41  profilanswer
 

Bah c'est logique quand même. [:spamafote]

n°1389152
Ricco
Retour au pays
Posté le 16-06-2006 à 15:40:17  profilanswer
 

Et y'a un moyen de fair ce que je veux faire ?? Charger à la volée de nouvelles fonction javascript ?


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1389181
nemohp
Adepte du provisoire permanent
Posté le 16-06-2006 à 16:00:58  profilanswer
 

via la commande "eval" peut etre : http://www.laltruiste.com/document [...] _eval.html

n°1389212
Ricco
Retour au pays
Posté le 16-06-2006 à 16:22:06  profilanswer
 

J'ai tenté ça mais ça fonctionne pas  
 

Code :
  1. <html>
  2. <body>
  3. <a href="#" onClick="eval('function testR(){ alert(\'test\');}');document.getElementById('toto').innerHTML = '<a href=\'#\' onClick=\'testR();\' > Ajout </a> ';return false;">Click ICI</a>
  4. <div id=toto ></div>
  5. </body>
  6. <html>


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1389221
nemohp
Adepte du provisoire permanent
Posté le 16-06-2006 à 16:28:37  profilanswer
 

Code :
  1. <html>
  2.       <body>
  3.       <a href="#"
  4.            onClick="document.getElementById('toto').innerHTML = '<a href=\'#\' onClick=\'testR();\' > Ajout </a> <script>function testR(){ alert(\'test\');}</script> ' ">Click ICI</a>
  5.       <div id="toto" ></div>
  6.       </body>
  7.       <html>

n°1389412
grosbin
OR die;
Posté le 16-06-2006 à 21:32:57  profilanswer
 

Moi aussi j'ai tenté des milliers de fois, toujours rien ..


---------------
Photos Panoramiques Montagnes Haute Savoie
n°1389414
gatsu35
Blablaté par Harko
Posté le 16-06-2006 à 21:37:18  profilanswer
 

function addScript(src) {
  var header = document.getElementsByTagName("head" )[0];
  var newScript = document.createElement("script" );
  newScript.type="text/javascript";
  newScript.src=src;
  header.appendChild("script" );
}
 
codé en live ici, ça marche après tests
genre :  
alert("tata" ); ca fonctionne
mais tout ce qui est déclaration de fonction c'est DTC bien profond sous Firefox :/
dommage ça aurait pu être cool.
 
Go to google  :sweat:

Message cité 1 fois
Message édité par gatsu35 le 16-06-2006 à 21:54:06
n°1389437
grosbin
OR die;
Posté le 16-06-2006 à 22:45:57  profilanswer
 

gatsu35 a écrit :

header.appendChild("script" );

La console JS ne reconnait pas appendChild peut-être faut-il déclarer un document XHTML ésotérique ?
Rajouter un élement child à la balise head ça c'est XML compliant ..  :sarcastic:


---------------
Photos Panoramiques Montagnes Haute Savoie
mood
Publicité
Posté le 16-06-2006 à 22:45:57  profilanswer
 

n°1389440
gatsu35
Blablaté par Harko
Posté le 16-06-2006 à 22:50:47  profilanswer
 

après plusieurs tests et une lecture sur cette page  
 
http://www.ibilab.net/webdev/artic [...] ipt-13.htm
 
j'ai ainsi créé et nettoyé un peu les deux fonctions suivantes qui fonctionnent assez bien mais... :  

Code :
  1. function include(fichier){
  2.  // Si notre variable globale (rattachee a  l'objet window)  
  3.  // n'existe pas, on la cree.
  4.  if(window.includeFiles == undefined)  {
  5.   window.includeFiles = new Array();
  6.   }
  7.  try {
  8.   var script = document.createElement("script" );
  9.   script.type = "text/javascript";
  10.   script.src  = fichier;
  11.   document.getElementsByTagName("head" )[0].appendChild(script);
  12.   window.includeFiles.push(fichier);
  13.  }
  14.  catch(e) {
  15.   document.write('$lt;script type="text/javascript" src="' + fichier + '"><\/script>');
  16.   window.includeFiles.push(fichier);
  17.  }
  18. }
  19. function include_once(fichier) {
  20.  if(window.includeFiles == undefined) {
  21.   window.includeFiles = new Array();
  22.  } else {
  23.   var nbr = window.includeFiles.length
  24.   for(var i=0; i < nbr; i++) {
  25.   if(window.includeFiles[i] == fichier)
  26.    return false;
  27.   }
  28.  }
  29.  include(fichier);
  30.  return true;
  31. }


 
j'ai alors créé une fonction go() qui chargeait un fichier test.js puis elle appelle une fonction testjs() qui est déclaré dans ce fichier javascript.
 
le fichier test.js :

Code :
  1. alert("tata" );
  2. function testjs() {alert("toto" );}


 
la fonction go()

Code :
  1. function go() {
  2.   include_once("test.js" );
  3.  testjs();
  4. }


résultats lors de l'appel de la fonction go via un input :  
 
Internet explorer :  
1ere fois : "tata", puis "toto".....2eme fois : "toto".
FireFox :
1ere fois : "tata", puis Erreur JS.....2eme fois : "toto".
Opera :
1ere fois : rien, puis "toto"....2eme fois : "toto".
 
conclusion :  
sous IE, le fichier JS est interprété et les déclaration de fonction le sont immédiatement
sous FF, le fichier JS est interprété mais les déclarations de fonction sont faites après un temps de latence j'ai l'impression. J'ai testé en lancant setTimeout("testjs()",20), et ca marchait sous firefox (en gros 20 millisecondes avec l'include du JS je lance testjs().
et sous Opera, ben le fichier JS n'est pas interprété mais les functions déclarées sont bien intégrées.

n°1389441
gatsu35
Blablaté par Harko
Posté le 16-06-2006 à 22:52:49  profilanswer
 

grosbin a écrit :

La console JS ne reconnait pas appendChild peut-être faut-il déclarer un document XHTML ésotérique ?
Rajouter un élement child à la balise head ça c'est XML compliant ..  :sarcastic:


 
c'est pas la console JS qui doit reconnaitre appendChild [:petrus75]
appendChild c'est une méthode inhérente à n'importe quel élément du DOM de ta page.[:petrus75]
 
si tu testais bien et jetais un coup d'oeil au DOM Inspector sous FF tu verrait que cette méthode est bel et bien présente.


Message édité par gatsu35 le 16-06-2006 à 22:53:10
n°1389443
grosbin
OR die;
Posté le 16-06-2006 à 22:54:54  profilanswer
 

appendChild -> is not a function  ;)  
Le genre de dév cross-navigateur qui me rappelle de sacrées nuits-blanches
Bravo à toi  :jap:


---------------
Photos Panoramiques Montagnes Haute Savoie
n°1389471
gatsu35
Blablaté par Harko
Posté le 16-06-2006 à 23:31:50  profilanswer
 

grosbin a écrit :

appendChild -> is not a function  ;)  
Le genre de dév cross-navigateur qui me rappelle de sacrées nuits-blanches
Bravo à toi  :jap:


Ben c'est mon boulot [:spamafote] et puis j'aime passer des nuits blanches a faire du bordel de tests crossbrowsers à la fois pour le JS (DOM scripting), et les CSS.
 
Bon pour l'instant chez moi je fais pleins de tests sur IE, FF1.5 et Opera
et SAFARI dans le cadre du boulot...
 
Même si j'aimerai bien avoir 1 PC supplémentaire avec linux dessus pour konqueror et un mac mini pour tester safari et IE5 mac (meme si celui ci est voué à la poubelle)

n°1389530
grosbin
OR die;
Posté le 17-06-2006 à 08:26:11  profilanswer
 

gatsu35 a écrit :

Ben c'est mon boulot [:spamafote] et puis j'aime passer des nuits blanches a faire du bordel de tests crossbrowsers à la fois pour le JS (DOM scripting), et les CSS.

Bon courage vieux  :jap:  
Me rappelle que j'ai passé 2 semaine sur un truc similaire


---------------
Photos Panoramiques Montagnes Haute Savoie
n°1389567
FlorentG
Unité de Masse
Posté le 17-06-2006 à 09:58:29  profilanswer
 

grosbin a écrit :

appendChild -> is not a function  ;)


T'es sur quel navigateur pour que ça donne ça ? IE3 ? [:johneh]

n°1389658
grosbin
OR die;
Posté le 17-06-2006 à 15:23:03  profilanswer
 

Firefox
 

Code :
  1. function addScript(src) {
  2.   var header = document.getElementsByTagName("head" );
  3.   var newScript = document.createElement("script" );
  4.   newScript.type="text/javascript";
  5.   newScript.src=src;
  6.   header.appendChild("script" );
  7. }


---------------
Photos Panoramiques Montagnes Haute Savoie
n°1424166
guigui457
Posté le 11-08-2006 à 10:29:33  profilanswer
 

grosbin a écrit :


Code :
  1. function addScript(src) {
  2.   var header = document.getElementsByTagName("head" );
  3.   var newScript = document.createElement("script" );
  4.   newScript.type="text/javascript";
  5.   newScript.src=src;
  6.   header.appendChild("script" );
  7. }



 
il manque un element dans cette fonction! en effet le header est un tableau !!! donc
 

Code :
  1. function addScript(src) {
  2.   var header = document.getElementsByTagName("head" );
  3.   var newScript = document.createElement("script" );
  4.   newScript.type="text/javascript";
  5.   newScript.src=src;
  6.   header[0].appendChild("script" );
  7. }


 
ça marche sur firefox (plus de "appendChild is not a function" a s'en arracher les cheveux !), sur ie et opera !

n°2055236
renaudgarn​s
Posté le 09-02-2011 à 00:17:52  profilanswer
 

Je remonte le post car j'ai un problème similaire et je ne parviens à le résoudre malgré toutes ces réponses.  
 
J'affiche une requête SQL en tableau dans une div popup via un innerHTML.
Je construis en parallèle un tableau JS pour permettre une recherche dans la liste sans refaire de requête.
Mon bazar fonctionne bien tant que ma construction JS n'est pas dans le innerHTML (forcément... d'où ce message).
 
Pour l'ajax en JS, j'ai donc cet innerHTML :

Code :
  1. document.getElementById('PopUp').innerHTML = xhr.responseText;


 
dans ma popup PHP la construction JS :

Code :
  1. // Ecriture Javascript du tableau des prenom,nom et userid
  2. echo '<script type="text/javascript">';
  3. conv_tabjs($PrenomShrdFrds, 'js_prenomShared', $prempass=true);
  4. conv_tabjs($NomShrdFrds, 'js_nomShared', $prempass=true);
  5. conv_tabjs($IdShrdFrds, 'js_useridShared', $prempass=true);
  6. echo '</script>';


 
conv_tabJS est une fonction de conversion. Le tout fonctionne hors innerHTML, mais pas à l'intérieur. Firebug affiche tout le code, mais le script ne semble pas fonctionner.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Inserer des <script></script> par innerHTML ??

 

Sujets relatifs
Script Réseau en VBscript et démarrage de Windows[URGENT]Insérer des champs dans un texte/occurence d'un style
formulaire HTML sans script CGI[VBA-Excel] [Resolu] Insérer et supprimer des feuilles
Execution d'un script à distance : linux -> winXPProblème avec le script prog SquirrelMail...
[apache] arret de mon script cgi!!!executer script sous python
Petit script VB pour receuillir des informations sur des PC en réseauInserer label dans un UserForm
Plus de sujets relatifs à : Inserer des <script></script> par innerHTML ??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR