Bug à l'utilisation de </script> dans une chaine [Résolu]

Messages postés
5
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
19 décembre 2012
- - Dernière réponse : pierrealain6913
Messages postés
5
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
19 décembre 2012
- 19 déc. 2012 à 22:27
Bonjour à tous,
Je rencontre un problème en Javascript aussi bien dans IE que dans Firefox. Si j'utilise </script> dans une chaine de caractères, ce code met fin à la chaine de caractères. Cette chaine est interprétée comme une balise.
Je suppose que c'est dû à la norme du Javascript mais je voudrais en avoir confirmation ou alors savoir s'il y a une erreur dans mon code que je ne vois pas.
Voici le code qui ne fonctionne pas :
Ce bout de code est sensé ouvrir un PopUp et renvoyer le résultat du PopUp sur la page principale.
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

<head>
<meta http-equiv="Content-Type" content="text/html; charset='utf-8'" />
<meta name="Author" content="Pierre-Alain Vidil">
<title>Page exemple PopUp</title>
<script type="text/javascript">
function IEBrowser() {
var myWindow;
var ch;
ch = '<head>';
ch = ch + '<script type="text/javascript"> ';
ch ch + 'function Envoyer() { var pet window.opener; pet.document.getElementById("theform").lalat.value = "Vous avez cliqué sur Ok"; window.close(); }';
ch ch + 'function Annuler() { var pet window.opener; pet.document.getElementById("theform").lalat.value = "Vous avez cliqué sur Annuler"; window.close(); }';
ch = ch + "</script>";
ch = ch + '</head>';
ch = ch + 'Ceci est le texte du PopUp :
Cliquez sur Ok ou sur Annuler pour fermer la fenêtre
';
ch = ch + '<form id="therep">';
ch = ch + '
';
ch = ch + '</form>';
ch = ch + '[javascript:Envoyer() Ok] [javascript:Annuler() Annuler]';
myWindow=window.open('','','resizable=yes')
myWindow.document.write(ch);
myWindow.focus();
}
</script>
<style type="text/css">
</style>
</head>


<form id="theform">



</form>

</html>

Et voici le même code qui fonctionne en ajoutant une constante de caractère dans le </script> afin d'empêcher le navigateur d'interpréter ce texte comme une balise :
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">

<head>
<meta http-equiv="Content-Type" content="text/html; charset='utf-8'" />
<meta name="Author" content="Pierre-Alain Vidil">
<title>Page exemple PopUp</title>
<script type="text/javascript">
function IEBrowser() {
var myWindow;
var ch;
ch = "<head>";
ch = ch + '<script type="text/javascript"> ';
ch ch + 'function Envoyer() { var pet window.opener; pet.document.getElementById("theform").lalat.value = "Vous avez cliqué sur Ok"; window.close(); }';
ch ch + 'function Annuler() { var pet window.opener; pet.document.getElementById("theform").lalat.value = "Vous avez cliqué sur Annuler"; window.close(); }';
ch = ch + '\<\/script>';
ch = ch + '</head>';
ch = ch + "Ceci est le texte du PopUp :
Cliquez sur Ok ou sur Annuler pour fermer
";
ch = ch + '<form id="therep">';
ch = ch + '
';
ch = ch + '</form>';
ch = ch + '[javascript:Envoyer() Ok] [javascript:Annuler() Annuler]';
myWindow=window.open('','','resizable=yes')
myWindow.document.write(ch);
myWindow.focus();
}
</script>
<style type="text/css">
</style>
</head>


<form id="theform">



</form>

</html>

Est-ce normal ?
Quelqu'un a-t-il une idée ?
Merci d'avance pour vos réponses.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
14594
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 novembre 2019
137
3
Merci
Bonjour,

Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).

Tu peux essayer de séparer la chaine en 2 morceau : '</sc' ... 'ript>'

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
5
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
19 décembre 2012
0
Merci
Merci NHenry pour ta réponse. C'est une excellente idée.
Ceci dit sait-on pourquoi les navigateurs se comportent comme cela ?
Est-ce indiqué quelque part dans la référence du Javascript ?
Commenter la réponse de pierrealain6913
Messages postés
14594
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 novembre 2019
137
0
Merci
Bonjour,

Non, je n'ai aucune idée du pourquoi du problème, mais c'est peut être un raccourcis utilisé par les devs des navs pour ne pas se compliquer la tache de décodage.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
Messages postés
268
Date d'inscription
lundi 9 janvier 2006
Statut
Membre
Dernière intervention
19 janvier 2017
2
0
Merci
Je pense qu'en passant par la méthode DOM createElement() de l'objet document, on peut se passer d'inscrire la chaîne "</script>".
var monscript=document.createElement("script");
monscript.type="text/javascript";
placer l'ensemble du script dans une variable chaîne
et ensuite insérer la chaîne avec
monscript.innerHTML=chaine_du_script;
mettre un attribut id à l'élément <head>
retrouver l'élément <head> avec
var monhead=document.getElementById(id_de_head);
puis monhead.appendChild(monscript);

C'est du DOM HTML, cela devrait marcher...
Bon courage!...
Commenter la réponse de cs_jperre
Messages postés
5
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
19 décembre 2012
0
Merci
Je clos cette requête qui somme toute n'était qu'une curiosité de puriste.
Merci à tous pour vos réponses et vos idées.
Commenter la réponse de pierrealain6913