pierrealain6913
Messages postés7Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention24 avril 2022
-
11 déc. 2012 à 10:41
pierrealain6913
Messages postés7Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention24 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.
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 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
pierrealain6913
Messages postés7Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention24 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 ?
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 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
cs_jperre
Messages postés268Date d'inscriptionlundi 9 janvier 2006StatutMembreDernière intervention19 janvier 20172 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!...
Vous n’avez pas trouvé la réponse que vous recherchez ?