IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Evaluer du Javascript � la vol�e


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Par d�faut Evaluer du Javascript � la vol�e
    Bonsoir � tous !

    Je ne comprends pas pourquoi le script suivant fonctionne bien sous Firefox, Chrome et Opera, mais pas sous Internet Explorer 7.
    Peut �tre que quelqu'un saura m'�clairer ?

    Le but de ce script est d'�valuer � la vol�e une chaine contenant des scripts Javascript ainsi que du HTML.
    Il peut y avoir plusieurs scripts dans la chaine, m�lang�s avec du HTML.
    Pour l'exemple, la chaine contient uniquement un script affichant "Test" dans une box alert.

    Test.html:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <body>
    	<script type="text/javascript">
    			var element = document.createElement('div');
    			document.body.appendChild(element);
    			element.innerHTML = "<script type=\"text/javascript\">alert('Test');<\/script>";
    			var scripts = element.getElementsByTagName("script");
    			for(var i=0; i<scripts.length; i++)
    			{
    				if (window.execScript)
    					window.execScript(scripts[i].text.replace('<!--',''));
    				else
    					window.eval(scripts[i].text);
    			}
    	</script>
    </body>
    Au chargement de Test.html, on devrait voir une box alert affichant "Test". Ce n'est pas le cas sous IE.
    Ne cherchez pas la logique de ce code, c'est juste un exemple :p j'ai pris que la partie utile de mon code pour d�crire le bug que je rencontre.

    Le probl�me est visiblement li� � element.getElementsByTagName("script"), qui ne trouve aucun script avec IE, puisque scripts.length vaut 0.

    Quelqu'un sait-il pourquoi �a ne fonctionne pas sous IE ?

    Je vous remercie et... bonne nuit !

  2. #2
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Octobre 2010
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 109
    Par d�faut
    Pourquoi tu �chappes le slash de ta balise script ?

    EDIT : Exact je suis b�te :p

  3. #3
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    ben sinon cette balise sera comprise comme la balise de fermeture du script courant, et pas comme du string html ...

    Il y a un post ou une contribution sur l'ajout d'une balise script dynamiquement en passant par le DOM
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    document.createElement('script')
    une petite recherche et tu trouveras ton bonheur ...
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Par d�faut
    Citation Envoy� par SpaceFrog Voir le message
    Il y a un post ou une contribution sur l'ajout d'une balise script dynamiquement en passant par le DOM
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    document.createElement('script')
    une petite recherche et tu trouveras ton bonheur ...
    J'ai pens� � cette m�thode qui devrait certainement marcher en effet.
    Mais l'objectif est ici de pouvoir �valuer du code provenant d'un serveur via AJAX par exemple, ou saisi par un utilisateur.

    Exemple, lors d'un appel AJAX, le serveur m'envoie du HTML contenant �galement quelques scripts Javascripts, le but est d'ex�cuter tous ces scripts.

    getElementsByTagName fonctionne pour �a sur tous les browsers, mais pas sur IE, il y a peut �tre quelque chose de diff�rent � faire pour ce browser...

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Citation Envoy� par bluelambda Voir le message
    getElementsByTagName fonctionne pour �a sur tous les browsers, mais pas sur IE, il y a peut �tre quelque chose de diff�rent � faire pour ce browser...
    Je n'en ai pas retrouv� la mention expresse dans leur doc, mais IE ou pas IE, il me semble que getElementsByTagName et createElement attendent en principe un nom de balise en forme "canonique" (en maj)

    J'ai cherch� dans la ref DOM du w3c mais pour le moment je n'ai que �a
    Citation Envoy� par w3c
    From the DOM point of view, The biggest difference between HTML 4.01 (and earlier) and XHTML 1.0 is that XHTML is case sensitive, whereas HTML 4.01 is case insensitive. The HTML case insensitivity is also reflected in the DOM HTML API. For instance, element and attribute names are exposed as all uppercase (for consistency) when used on an HTML document, regardless of the character case used in the markup. Since XHTML is based on XML, in XHTML everything is case sensitive, and element and attribute names must be lowercase in the markup.
    Si quelqu'un a plus d'infos, vous g�nez pas, �a fait longtemps que ce sujet m'intrigue sans que j'aie eu le temps de m'y pencher plus en d�tail pour l'instant ^^

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Par d�faut
    J'ai trouv� un exemple qui fonctionne, il ne me reste plus qu'� comprendre pourquoi je verrai �a ce soir.
    Il charge en AJAX un fichier HTML contenant �galement du Javascript, et je vois bien l'effet sous IE 7.

    Voir ICI

    Le code HTML (contenant du Javascript) t�l�charg� � la vol�e en AJAX

  7. #7
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    D�cembre 2010
    Messages
    1 009
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : sans emploi

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 1 009
    Par d�faut
    Citation Envoy� par bluelambda Voir le message
    J'ai pens� � cette m�thode qui devrait certainement marcher en effet.
    Mais l'objectif est ici de pouvoir �valuer du code provenant d'un serveur via AJAX par exemple, ou saisi par un utilisateur.

    Exemple, lors d'un appel AJAX, le serveur m'envoie du HTML contenant �galement quelques scripts Javascripts, le but est d'ex�cuter tous ces scripts.

    getElementsByTagName fonctionne pour �a sur tous les browsers, mais pas sur IE, il y a peut �tre quelque chose de diff�rent � faire pour ce browser...
    Raison de plus, si tu comptes �x�cut� du code provenant d'un script, il suffit d'ajouter le script � la page dynamiquement et tu ne devras plus t'ennuyer avec ni AJAX ni EVAL.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    var script = document.createElement('script');
    script.src = "http://www.tonsite.com/";
    document.getElementsByTagName('head')[0].apprendChild(script);
    pour du code re�u brut (par exemple par un input utilisateur) tu peux soit utiliser eval directement sans passer par un script ( = 1 ligne de code) sinon reprendre les 3 lignes plus haut en remplacant "script.src = ... " par "script.text = 'mon_code_a_exec';".

  8. #8
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    D�cembre 2010
    Messages
    1 009
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : sans emploi

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 1 009
    Par d�faut
    apr�s avoir test� ton code (car �a me semblait �trange que IE refuse)

    effectivement sans doctype �a fonctionne partout sauf sous IE qui refuse les balises html (donc <script>) dans innerHTML et avec doctype �a fonctionne, oh magie !


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> <head>
    	<script type="text/javascript" >
    	window.onload = function(){
    			var element = document.createElement('div');
    			element.innerHTML = "<script type='text/javascript'>alert('Test');</s"+"cript>";
     
    			document.body.appendChild(element);
     
    			var scripts = element.getElementsByTagName("script");
     
    			for(var i=0; i<scripts.length; i++)
    			{
    				if (window.execScript){
    					window.execScript(scripts[i].text.replace('<!--',''));
    				}
    				else{
    					window.eval(scripts[i].text);
    				}
    			}
    	};
    	</script>
    	</head>
    	<body>zd</body>
     
     
     
     
    </html>

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Par d�faut
    Citation Envoy� par Willpower Voir le message
    apr�s avoir test� ton code (car �a me semblait �trange que IE refuse)

    effectivement sans doctype �a fonctionne partout sauf sous IE qui refuse les balises html (donc <script>) dans innerHTML et avec doctype �a fonctionne, oh magie !
    Je n'ai pas pu tester sur IE7 mais sur IE8 ton exemple ne fonctionne pas... je n'ai pas la popup qui apparait.
    Sous quel IE l'as-tu test�?

  10. #10
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    D�cembre 2010
    Messages
    1 009
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : sans emploi

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 1 009
    Par d�faut
    Citation Envoy� par bluelambda Voir le message
    Je n'ai pas pu tester sur IE7 mais sur IE8 ton exemple ne fonctionne pas... je n'ai pas la popup qui apparait.
    Sous quel IE l'as-tu test�?
    9

  11. #11
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    Je ne vois pas en qui la m�thode dom ne te permettrait pas de coller le texte du script dans la balise cr��e ?
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Par d�faut
    Citation Envoy� par SpaceFrog Voir le message
    Je ne vois pas en qui la m�thode dom ne te permettrait pas de coller le texte du script dans la balise cr��e ?
    La m�thode DOM est tr�s bien mais ne s'applique pas � ce que je veux faire.
    Le texte que je re�oit provient d'un serveur, et est issu d'un appel AJAX, il peut contenir n'importe quel code HTML entrecoup� de scripts Javascripts.
    Je dois inclure ce texte dans ma page et ex�cuter tous les scripts qu'il contient.
    Pour r�cup�rer le texte des scripts, j'utilise getElementsByTagName (qui ne fonctionnait pas dans mon exemple).

    J'ai r�solu mon probl�me hier soir, j'updaterai ce topic rapidement pour dire ce que j'ai fait.

  13. #13
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    Je n'y vois toujours aucune contrindication ...
    Il te suffit de parser le code html js re�u pour en recup�rer le "texte" du script et l'ins�rer � la vol� dans une balise script cr��e par le DOM ...
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Par d�faut
    OK.
    Mais j'ai r�ussi � corriger mon erreur avec les liens vers l'exemple que j'ai post�s plus haut.
    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Bloquer script Javascript a la vol�e
    Par islogged dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 20/06/2011, 02h19
  2. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    R�ponses: 21
    Dernier message: 17/04/2009, 17h14
  3. Code JavaScript � la vol�e
    Par remibeginer dans le forum ASP.NET
    R�ponses: 10
    Dernier message: 26/05/2008, 14h41
  4. JavaScript de v�rification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    R�ponses: 6
    Dernier message: 26/02/2003, 13h48
  5. Evaluation d�expression
    Par mobisky dans le forum Algorithmes et structures de donn�es
    R�ponses: 4
    Dernier message: 09/09/2002, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo