Bug à l'utilisation de </script> dans une chaine

Résolu
pierrealain6913 Messages postés 7 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 24 avril 2022 - 11 déc. 2012 à 10:41
pierrealain6913 Messages postés 7 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 24 avril 2022 - 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.

5 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 déc. 2012 à 12:19
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
3
pierrealain6913 Messages postés 7 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 24 avril 2022
12 déc. 2012 à 19:25
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 ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 déc. 2012 à 20:39
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
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
12 déc. 2012 à 22:46
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!...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pierrealain6913 Messages postés 7 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 24 avril 2022
19 déc. 2012 à 22:27
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.
0
Rejoignez-nous