Problème double "appel" de la page (alert() exec

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
bdfi
Arias
Messages : 4
Inscription : 22 mars 2009, 13:27

Problème double "appel" de la page (alert() exec

Message par bdfi »

Suite à un problème de "répétition de requête" (le formulaire était exécuté deux fois sans comprendre pourquoi), j'ai trouvé sur le web que cela arrivait si par exemple l'url d'une image était vide (ref : http://www.developpez.net/forums/d23756 ... -src-vide/). N'ayant à priori pas d'erreur strictement identique, j'ai dépouillé mon source php au maximum (cf ci-dessous) pour s'apercevoir que c'était un caractère accentué qui semblait poser le problème. (je précise que dans mon cas les caractères proviennent d'une base; et bien entendu, le problème ne se pose plus si par exemple on remplace è par "è", donc il suffirait que je transcode les lectures).
Mais est-ce normal ? Autant c'est logiquement explicable dans le cas d'un img src='', autant ici c'est plus surprenant... Et ce qui pose problème à mon avis, même si c'est bien un comportement "normalisé", c'est le temps passé rien que pour trouver le problème potentiel...

Code avec lequel sous firefox 3.0.7 le alert 'body' est exécuté deux fois, le 'fin code' une fois :

Code : Tout sélectionner

<!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><title>Two body alert?</title></head>
<body>
<script type='text/javascript'>javascript:alert('body')</script>
è
<script type='text/javascript'>javascript:alert('fin code')</script>
</body>
</html>
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Avatar de l’utilisateur
jpj
Animal mythique
Messages : 25261
Inscription : 01 août 2005, 15:38

Message par jpj »

Je déplace dans "Développement web".
► Si votre problème est [Résolu], svp, marquez-le.
► Pas de support par mp, l’aide se fait sur le forum.
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Je ne sais pas pourquoi le code est exécuté deux fois, mais ce qui m'étonne c'est qu'il soit même exécuté.

D'une part ton code JavaScript n'est pas échappé dans un bloc CDATA alors qu'il se trouve dans le body, et en plus il y a ces préfixes « javascript: » qui ne veulent rien dire.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
bdfi
Arias
Messages : 4
Inscription : 22 mars 2009, 13:27

Message par bdfi »

Benoit a écrit :Je ne sais pas pourquoi le code est exécuté deux fois, mais ce qui m'étonne c'est qu'il soit même exécuté.

D'une part ton code JavaScript n'est pas échappé dans un bloc CDATA alors qu'il se trouve dans le body, et en plus il y a ces préfixes « javascript: » qui ne veulent rien dire.
Of course, mais ce n'est pas le problème :) Pour le CDATA, j'avais fait l'essai, mais je préférais garder un extrait court pour montrer le pb, pour le javascript, mea culpa, c'est un résidu... Remplacer par :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>
      Two body alert ?
    </title>
  </head>
  <body>
    <script type='text/javascript'>
//<![CDATA[
    alert('body')
    //]]>
    è <script type='text/javascript'>
//<![CDATA[
    alert('fin code')
    //]]>
    </script>

  </body>
</html>
Le résultat est le même. je sais bien que dans ce cas précis si je remplace è par &egrave; ça marche, (dans mon cas les données affichées peuvent provenir de différentes sources, donc il faut les convertir) mais la question de départ était (si quelqu'un à la réponse...) : pourquoi un tel comportement de la part de firefox avec le premier caractère accentué ? C'est surprenant et même si c'est un comportement normalisé, ça risque d'embêter du monde...

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
bdfi
Arias
Messages : 4
Inscription : 22 mars 2009, 13:27

Message par bdfi »

Pour info : le problème n'apparaît plus dès que l'on ajoute en zone d'entête la ligne

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Ca serait donc bien que lors du traitement du caractère accentué sans aucun charset déclaré, firefox génère une seconde requête identique (un peu comme pour le img src="").

Est-ce quelqu'un sait si un tel comportement est référencé quelque part ?


Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Zefling
Tyrannosaurus Rex
Messages : 2577
Inscription : 21 déc. 2004, 03:45

Message par Zefling »

Benoit a écrit :Je ne sais pas pourquoi le code est exécuté deux fois, mais ce qui m'étonne c'est qu'il soit même exécuté.

D'une part ton code JavaScript n'est pas échappé dans un bloc CDATA alors qu'il se trouve dans le body, et en plus il y a ces préfixes « javascript: » qui ne veulent rien dire.
En théorie c'est pour protéger le code si c'est nécessaire (notamment à cause des caractères « spéciaux » : < et &). Si il n'y en a pas à protéger, c'est pas obligatoire.

http://www.w3.org/TR/xhtml1/#h-4.8

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)
Mon blog de dév web ― Thème pour le forum Geckozone ― Le clavier Latin-9 fr sous Windows ― Raccourcis clavier pour Firefox
Debian 8 KDE avec Firefox & Nightly
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Ici je pense que c'est justement une des balises de script qui n'est pas reconnue comme telle à cause du mélange avec le caractère précédent ou suivant.

bdfi : le problème n'est pas tant qu'aucun charset n'est déclaré, c'est que ton fichier est enregistré en UTF-8. Le jeu de caractères par défaut est ISO-8859-1, et les caractères accentués n'y sont pas représentés sur le même nombre d'octets.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

Désolé, mais en essayant le fichier test corrigé (une balise script non fermée), je n'ai aucun problème:

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Two body alert ?</title>
  </head>
  <body>

    <script type='text/javascript'>
        alert('body')
    </script>
    è
    <script type='text/javascript'>
        alert('fin code')
    </script>

  </body>
</html> 
J'ai fait le test en local (file://) et sur serveur (http://), avec l'information du charset manquante, et donc un Ú d'affiché à l'écran, et les 2 alert n'apparaissent qu'une seule fois...

[edit]
pour être complet, j'ai enregistré ce fichier en utf-8, mais servi en ISO-8859-1, et comme aucune info n'est présente dans le corps du fichier, en local il est interprété par défaut en ISO-8859-1 également.
bdfi
Arias
Messages : 4
Inscription : 22 mars 2009, 13:27

Message par bdfi »

Benoit a écrit :bdfi : le problème n'est pas tant qu'aucun charset n'est déclaré, c'est que ton fichier est enregistré en UTF-8. Le jeu de caractères par défaut est ISO-8859-1, et les caractères accentués n'y sont pas représentés sur le même nombre d'octets.
Le problème a disparu lorsque j'ai ajouté le charset, mais comme en même temps je faisais des tests, et que je jongle entre les CP850, CP1252 et UTF-8, impossible de dire en quoi j'enregistrais.

Mais je vais réessayer en essayant plusieurs formats d'enregistrement, histoire de voir exactement quand le problème arrive ou non.

En tout cas, maintenant que j'utilise des iconv pour les transformations entre fichiers d'entrées, fichiers de traces et affichages, je n'ai plus de problèmes du tout.
Martin a écrit :J'ai fait le test en local (file://) et sur serveur (http://), avec l'information du charset manquante, et donc un Ú d'affiché à l'écran, et les 2 alert n'apparaissent qu'une seule fois...
J'avais é d'affiché, avec ou sans le charset, d'ou sans doute un enregistrement utf-8...

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Zefling
Tyrannosaurus Rex
Messages : 2577
Inscription : 21 déc. 2004, 03:45

Message par Zefling »

bdfi a écrit :J'avais é d'affiché, avec ou sans le charset, d'ou sans doute un enregistrement utf-8...
Si il n'y a aucune information, le navigateur essaie de deviner le charset par déduction (je me sert d'ailleurs de cette fonctions pour trouver le format d'enregistrement des certains fichiers .info ou readme que je récupère, histoire de savoir dans quel mode je dois lancer le logiciel)
Mon blog de dév web ― Thème pour le forum Geckozone ― Le clavier Latin-9 fr sous Windows ― Raccourcis clavier pour Firefox
Debian 8 KDE avec Firefox & Nightly
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Semrush [Bot] et 4 invités