JavaScript et XHTML ?

p4bl0

Membre expert
Club iGen
12 Juillet 2004
4 772
423
36
$PWD
p4bl0.net
Bonjour !

J'ai un petit problème : aucun javascript ne peut s'exécuter si je déclare le "Content-type" de mes pages web comme étant "application/xhtml+xml"...

Mon site est valide XHTML 1.1 et passe dans un parseur xml sans problème, mais le javascript ne marche pas sauf si je met le Content-type à "text/html"...


Je comprend pas. Quelqu'un aurait-il une explication ? :confused:
 
Comme le xhtml 1.1 est obligatoirement du xml tu dois utiliser la section CDATA
pour éviter que la navigateur cherche à interpréter les éventuels codes html dans ton javascript.

Bloc de code:
<script type="text/javascript" >
[B]//<![CDATA[[/B]
  ...

// ]]>
</script>
P.S. : XHTML 1.1 tu aimes la difficult&#233;. ;)
 
Comme le xhtml 1.1 est obligatoirement du xml tu dois utiliser la section CDATA
pour &#233;viter que la navigateur cherche &#224; interpr&#233;ter les &#233;ventuels codes html dans ton javascript.

Bloc de code:
<script type="text/javascript" >
[B]//<![CDATA[[/B]
  ...

// ]]>
</script>
P.S. : XHTML 1.1 tu aimes la difficult&#233;. ;)
Je sais pas si j'aime la difficult&#233; ou si je suis trop geek pour me r&#233;signer &#224; ne pas utiliser la derni&#232;re norme... :rateau:

Mes scripts sont tous dans des fichiers s&#233;par&#233;s (<srcipt src="..." type="text/javascript"></script>)

Le truc c'est que j'utilise une lib php pour faire du AJAX qui g&#233;n&#232;re automatiquement le script donc je vais voir pour modifier la classe php que j'utilise, c'est opensource donc j'ai le droit :)


En tout cas merci, j'y avais m&#234;me pas pens&#233;... :casse:

PIAF: vous devriez gnagnagna avant d'en offrir de nouveau &#224; gloup gloup...
 
Voil&#224; j'ai poster ce qu'il faut faire sur leur wiki : http://wiki.xajaxproject.org/Tips_and_Tricks:Using_xajax_with_xhtml1.1

Si quelqu'un peut corriger les fautes d'anglais &#231;a serait cool pour eux :siffle:


edit : par contre c'est bien mieux au niveau validit&#233; xml mais &#231;a marche toujours pas en fait... :(

edit2 : y a plus que la recherche live qui marche pas en fait :confused:

edit 3 : ah ben non y a rien qui marche... en fait c'est assez al&#233;atoire, sauf pour le recherche qui ne marche jamais.
 
sinon tant pis je n'ai qu'&#224; mettre
Bloc de code:
header("Content-type: text/html; charset=utf-8");
&#224; la place de
Bloc de code:
header("Content-type: application/xhtml+xml; charset=utf-8");

c'est dommage mais bon...


EDIT :
Apr&#232;s plusieurs test, je vois qu'en fait, le fait de mettre le script entre <![CDATA[ et ]]> n'am&#233;liore rien, c'est encore pire, il y a des fois ou &#231;a ne marche pas m&#234;me en text/html...

donc je vais laisser tel que c'est maintenant et mettre text/html comme content-type

edit 2 : du coup je supprime la page du wiki de xajax
 
J'ai trouvé ça (passage en 1.0 si pas 1.1) :

Bloc de code:
<?
if(stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")){
header("Content-Type: application/xhtml+xml; charset=UTF-8");
echo('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">');
} else {
header("Content-Type: text/html; charset=UTF-8");
echo ('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
}
?>

source
 
EDIT :
Apr&#232;s plusieurs test, je vois qu'en fait, le fait de mettre le script entre <![CDATA[ et ]]> n'am&#233;liore rien, c'est encore pire, il y a des fois ou &#231;a ne marche pas m&#234;me en text/html...

donc je vais laisser tel que c'est maintenant et mettre text/html comme content-type


Ah faut faire un mix en fait (j'ai h&#233;sit&#233; entre &#231;a ou l'autre et j'ai post&#233; la mauvaise solution). ;)

Bloc de code:
<script type="text/javascript" >
[B]<!--/*--><![CDATA[//><!--[/B]
  ...
[B]//--><!]]>[/B]
</script>
source (fin de l'article)
 
Ah faut faire un mix en fait (j'ai h&#233;sit&#233; entre &#231;a ou l'autre et j'ai post&#233; la mauvaise solution). ;)

Bloc de code:
<script type="text/javascript" >
[B]<!--/*--><![CDATA[//><!--[/B]
  ...
[B]//--><!]]>[/B]
</script>
source (fin de l'article)
Mais c'est propre ce genre de commentaire l&#224; ?
c'est pas un peu foireux comme truc ?

edit : Je viens de voir que c'est conseill&#233; par OpenWeb, &#231;a doit &#234;tre bien alors... j'essaye
edit 2 : &#231;a marche bien si je laisse text/html, mais &#231;a ne marche pas plus si je met application/xhtml+xml :(
 
Dans l'article, pour que ça marche bien à tous les coups, il conseille de le mettre dans un fichier séparé :

Bloc de code:
<script type="text/javascript" src="nom_de_mon_fichier.js"></script>
Ah, il écrit le CDATA autrement, le problème vient peut-être de là :

Bloc de code:
<script type="text/javascript">
<![CDATA[

function valider(){
  // si la valeur du champ prenom est non vide
  if(document.formSaisie.prenom.value != "") {
    // les données sont ok, on peut envoyer le formulaire    
    return true;
  }
  else {
    // sinon on affiche un message
    alert("Saisissez le prénom");
    // et on indique de ne pas envoyer le formulaire
    return false;
  }
}

]]>
</script>
 
Dans l'article, pour que &#231;a marche bien &#224; tous les coups, il conseille de le mettre dans un fichier s&#233;par&#233; :

Bloc de code:
<script type="text/javascript" src="nom_de_mon_fichier.js"></script>
Oui j'ai vu, mais je ne peux pas, le javascript en question est g&#233;n&#233;r&#233; &#224; l'appelle de la page, si je veux le mettre dans un fichier s&#233;par&#233;, il faudrait que j'&#233;crive le fichier &#224; chaque chargement de page, ce qui n'est pas envisageable.

En tout cas merci pour tes r&#233;ponses !! :up: mais vBull' y veut pas qu'j'te boul'...

C'est pas grave je vais laisser comme &#231;a, l'essentiel c'est que &#231;a marche :)