Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2916 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [Résolu][XHTML/Javascript/W3C] Problème de XHTML dans un Javascript

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu][XHTML/Javascript/W3C] Problème de XHTML dans un Javascript

n°1462111
tizard
Posté le 21-10-2006 à 18:42:34  profilanswer
 

Bonjour,  
 
j'ai un petit problème, je construis un site (jeu)et il a toujours été valide W3C pour l'instant (XHTML 1.1)
 
Mais je commence à utiliser un script en javascript avec une fonction avec un argument "textuel" (la fonction va en fait afficher un DIV au millieu de l'écran et mettre le texte inclu dans l'argument dans le Div)
 
Bref le problème n'est pas là, mais juste que W3C refuse d'afficher ceci :  

Code :
  1. <script type="text/javascript">
  2. pop("Choisissez l\'arme pour équiper votre troupe : <br />", "200", "300", "" );
  3. </script>


 
Erreur : impossible de mettre un <br /> dans cet endroit. (ce script est dans un div, dans le body)
 
Erreur :  

Citation :

Error  Line 52 column 57: document type does not allow element "br" here.
 
pop("Choisissez l\'arme pour équiper votre troupe : <br />", "200", "300", "" );
 
The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).
 
One common cause for this error is the use of XHTML syntax in HTML documents. Due to HTML's rules of implicitly closed elements, this error can create cascading effects. For instance, using XHTML's "self-closing" tags for "meta" and "link" in the "head" section of a HTML document may cause the parser to infer the end of the "head" section and the beginning of the "body" section (where "link" and "meta" are not allowed; hence the reported error).
 


 
Merci de m'aider !

Message cité 2 fois
Message édité par tizard le 21-10-2006 à 20:28:04
mood
Publicité
Posté le 21-10-2006 à 18:42:34  profilanswer
 

n°1462114
FlorentG
Unité de Masse
Posté le 21-10-2006 à 18:44:11  profilanswer
 

tizard a écrit :

Bonjour,  
 
j'ai un petit problème, je construis un site (jeu)et il a toujours été valide W3C pour l'instant (XHTML 1.1)


Dzzzzt erreur ! L'XHTML 1.1 n'est pas géré par IE, et doit être envoyé aux agent-utilisateurs avec le type mime application/xhtml+xml. Veuillez recommencer en Xhtml 1.0

n°1462116
FlorentG
Unité de Masse
Posté le 21-10-2006 à 18:44:58  profilanswer
 

tizard a écrit :

Code :
  1. <script type="text/javascript">
  2. pop("Choisissez l\'arme pour équiper votre troupe : <br />", "200", "300", "" );
  3. </script>



Bienvenue dans le bordel de l'XHTML, le vrai. Conseil : ne met jamais de script comme ça dans le code XHTML direct, externalise les tous dans un fichier à part

n°1462120
tizard
Posté le 21-10-2006 à 18:48:54  profilanswer
 

Je met au passage un message pour déconseiller les utilisateurs de IE < 7 à ce site ^^ mais le problème n'est pas à ça...
 
C'est impossible même d'appeler une fonction avec un argument XHTML ?
Enfin les externaliser good, mais faut bien les appeler ! et pour les appeler, il faut bien faire un script comme ça, non ?

n°1462125
FlorentG
Unité de Masse
Posté le 21-10-2006 à 18:53:28  profilanswer
 

Ben non, pas obligé, t'as juste à remplacer ton truc par :

Code :
  1. <script type="text/javascript" src="pouet.js"></script>


Et faire un fichier pouet.js avec dedans :

Code :
  1. pop("Choisissez l\'arme pour équiper votre troupe : <br />", "200", "300", "" );


Et voilà

n°1462128
tizard
Posté le 21-10-2006 à 18:55:22  profilanswer
 

truc bien lourd quoi lol... ^^
et les messages où il n'y a pas de xhtml dedans je peux les mettre direct, ça posera pas trop de problème ?

n°1462130
FlorentG
Unité de Masse
Posté le 21-10-2006 à 18:55:59  profilanswer
 

Ouais, mais comme dit, pas top. En plus si c'est externalisé, c'est mis en cache par les navigateurs, donc moins de charge pour ton serveur...

n°1462131
tizard
Posté le 21-10-2006 à 18:57:29  profilanswer
 

ça veut dire que je suis partit pour créer 15 000 fichiers ::D
 
Bon merci beaucoup de ton aide ultra-rapide ;)
 
++

n°1462159
tizard
Posté le 21-10-2006 à 20:27:29  profilanswer
 

Bon alors, j'aime bien finir ce que je fais, donc je poste ici la solution que j'ai prise :)
 
Je ne pouvais pas créer 12 000 fichiers, puisque les messages à mettre sont dynamiques et peuvent donc changer en fonction du message que je veux mettre :p
 
Donc j'ai presque suivi ta solution, sauf que j'ai fait un  
echo '<script type="text/javascript" src="func.php?message='.urlencode($message).'"></script>';
 
La page func.php fait un urldecode sur ce message et exécute le script
(bien sûr func.php => header("Content-Type: text/javascript" ); en premier lieu)
 
Voilà bon c'était juste pour conclure :p

n°1462339
FlorentG
Unité de Masse
Posté le 22-10-2006 à 10:47:35  profilanswer
 

Pourrait-tu poster le contenu de func.php ? Histoire de vérifier un truc

mood
Publicité
Posté le 22-10-2006 à 10:47:35  profilanswer
 

n°1462425
tizard
Posté le 22-10-2006 à 14:09:23  profilanswer
 

FlorentG a écrit :

Pourrait-tu poster le contenu de func.php ? Histoire de vérifier un truc


 
Ok alors je commence par la fonction PHP loadpopup donc je me sert en premier lieu :

Code :
  1. function loadpopup($msg, $height = 100, $width = 200)
  2. {
  3. $mesg = addslashes($msg);
  4. $browser = get_browser(null, true);
  5. if($browser["browser"] == 'IE' && $browser["majorver"] < 7) $ie = 1;
  6. echo '<script type="text/javascript" src="inc/lpop.php?msg='.urlencode($msg).'&amp;height='.$height.'&amp;width='.$width.'&amp;ie='.$ie.'">
  7. </script>';
  8. }


 
lpop.php:

Code :
  1. <?php
  2. header("Content-Type: text/javascript" );
  3. require_once('pop.js');
  4. $mesg = addslashes(urldecode($_GET['msg']));
  5. echo 'var mesg = "'.$mesg.'";';
  6. echo 'var height = "'.$_GET['height'].'";';
  7. echo 'var width = "'.$_GET['width'].'";';
  8. echo 'var ie = "'.$_GET['ie'].'";';
  9. ?>
  10. pop(mesg, width, height, ie);


 
pop.js

Code :
  1. function opac(ie)
  2. {
  3. var divns6 = document.getElementsByTagName("div" );
  4. if(ie!=1)
  5. {
  6. divns6['A'].style.visibility = "visible";
  7. }
  8. divns6['B'].style.visibility = "visible";
  9. }
  10. function desopac(ie)
  11. {
  12. var divns6 = document.getElementsByTagName("div" );
  13. if(ie!=1)
  14. {
  15. divns6['A'].style.visibility = "hidden";
  16. }
  17. divns6['B'].style.visibility = "hidden";
  18. }
  19. function pop(mesg, width, height, ie){
  20. var msg = "<p style='margin: 0;'><a href='#' onclick='javascript:desopac();'><img src = 'images/croix.jpg' style='border:0;float: right;' alt='close'/></a><br />";
  21. var mesg2 = msg+mesg+"</p>";
  22. var divns6 = document.getElementsByTagName("div" );
  23. divns6["B"].style.width = width+"px";
  24. divns6["B"].style.height = height+"px";
  25. divns6["B"].innerHTML = mesg2;
  26. opac(ie)
  27. }


 
(et dans le body il faut que je mette  

Code :
  1. <div id="A"></div>
  2. <div id="B"></div>


 
(je met le CSS approprié pour les interessé ^^)

Code :
  1. #A
  2. {
  3. top:0;
  4. left:0;
  5. width:100%;
  6. height:100%;
  7. visibility: hidden;
  8. margin: 0;
  9. padding: 0;
  10. position:absolute;
  11. background-color:#BBBBBB;
  12. opacity: 0.5;
  13. filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);
  14. }
  15. #B
  16. {
  17. visibility : hidden;
  18. margin: auto;
  19. position: absolute;
  20. width: 200px;
  21. height: 50px;
  22. left: 40%;
  23. top: 40%;
  24. border: 1px black solid;
  25. background-color: #44BB22;
  26. text-align: center;
  27. padding: 1px;
  28. }


 
Donc voilà cette fonction met un foreground gris à 50% d'opacité mais caché au début, lorsqu'on lance la fonction cela affiche le foreground et modifie le div central (qui était caché aussi) pour écrire ce que l'on veut dedans. Notez que j'ai désactivé la fonction du foreground si IE < 7 car ça déconne (ça n'est pas une question de transparence, mais que le foreground ne s'affiche bizarrement qu'en haut à gauche de l'écran, un tout petit rectangle...)
 
Voili :p


Message édité par tizard le 22-10-2006 à 14:14:22
n°1462433
FlorentG
Unité de Masse
Posté le 22-10-2006 à 14:19:08  profilanswer
 

Ok, donc y'a un possible problème de sécurité qui permetterait d'injecter du JS arbitraire, et par exemple de récupérer les cookies du domaine -> Faille de type XSS (cross site scripting)
 
T'as presque fait ce qu'il fallait, t'as mis un addslashes sur $_GET['msg']. Mais tu dois aussi le faire sur les autres : height, width et ie.

n°1462445
tizard
Posté le 22-10-2006 à 14:43:51  profilanswer
 

Ok je le fais, merci :) (cela dit personne ne connait l'existance du fichier lpop... je pourrais autant le mettre en .inc ce qui limiterait tout, non ?)


Message édité par tizard le 22-10-2006 à 14:46:29
n°1462456
FlorentG
Unité de Masse
Posté le 22-10-2006 à 15:12:32  profilanswer
 

On connait pas l'existence du fichier, mais on peut facilement voir que le fichier contient des données passées en paramètres, donc modifiable. Deux-trois test, et hop !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [Résolu][XHTML/Javascript/W3C] Problème de XHTML dans un Javascript

 

Sujets relatifs
[HTML/CSS/Javascript] Probleme background avec les lignes d'un tableauProblème de création de processus
Probleme de débutant...MySQL : Problème de liste récursive
debutante sur css probleme "classique"Redirection JavaScript Aléatoire ?
MySQL.... un véritable problème...C# et application tierce (MS-EXCEL) (résolu)
Embed, Object et W3C 
Plus de sujets relatifs à : [Résolu][XHTML/Javascript/W3C] Problème de XHTML dans un Javascript


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR