(Novice) Frameset et incompatibilité IE toutes versions

Frameset et incompatibilité IE toutes versions (Novice) - HTML/CSS - Programmation

Marsh Posté le 13-06-2009 à 18:14:56    

Bonjour, je suis novice en édition HTML et rencontre un problème de compatibilité IE que je n'arrive pas à comprendre ni contourner.  
 
Lorsque j'ouvre "index.html" (voir ci-dessous) avec Firefox, Chrome, Opera, Safari, etc. j'ai bien 3 colonnes comme prévu: la première et troisième en rouge, celle du milieu en blanc:
http://x/download/mf.png
 
Mais avec IE 6 (et IE7 et IE8 (!!!) testés depuis browsershots.org) je n'ai que la colonne de gauche qui est rouge, et la colonne de droite est blanche:
http://www.x/download/ie6.png
 
Le problème semble apparaître suite à l'utilisation de la commande frameset, que j'utilise beaucoup dans le site (beaucoup plus intensément que dans le code ci-dessous).
 
Je n'ai aucune idée comment faire pour que IE affiche correctement les frameset.
(le recours aux frameset est nécessaire pour permettre le chargement de certaines parties du site à l'aide de javascript, du genre parent.frames.menulist.location.href="menu.html").
 
Quelqu'un a-t-il une idée comment rendre IE compatible sans tout chambouler?
(le site a été développé sur la base d'une compatibilité avec Chrome et est terminé mise à part ce problème qui casse toute la mise en page)
 
Pour cerner le problème, j'ai simplifié au maximum le code tout en reproduisant le bug comme dans les 3 fichiers ci-dessous:
 
==============================================
index.html:
==============================================

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
 
<frameset cols="*,1000,*" frameborder="0" border="0">  
 
<frame src="bg.html">  
 
<frameset rows="*" frameborder="0" border="0">  
<frame src="main.html" >
</frameset>
 
<frame src="bg.html">
 
</frameset>
</html>


Dans le site final, il y a plusieurs frames en ligne dans l'instruction frameset rows="*" frameborder="0" border="0">, justifiant la présence de ce frameset (même si ici on pourrait l'enlever - mais alors le problème ne se produit plus).  
 
==============================================
bg.html:
==============================================

<html>
<body bgcolor="#FF0000">
</body>
</html>


==============================================
main.html:
==============================================

<html>
<body>
 
bla bla bla
 
</body>
</html>


Message édité par CaseyAnders le 25-06-2009 à 10:07:54
Reply

Marsh Posté le 13-06-2009 à 18:14:56   

Reply

Marsh Posté le 14-06-2009 à 08:15:02    

==============================================
index.html:
==============================================

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
 
<frameset cols="*,100,*" frameborder="0" border="0">  
 
<frame src="bg.html">  
<frame src="middle.html" >
<frame src="bg.html">  
 
</frameset>
 
</html>


 
==============================================
middle.html:
==============================================

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
 
<frameset rows="*" frameborder="0" border="0">  
<frame src="main.html" >
</frameset>
 
</html>

Reply

Marsh Posté le 14-06-2009 à 08:19:52    

Si utiliser trop de frame alourdi le site et que tu vois que c'est lent, essaie d'utiliser AJAX, oublie les IFRAME sous IE7 et IE8 sous Windows Vista, les IFRAME sont hyper-controlées et sont donc souvent désactivées.

Reply

Marsh Posté le 14-06-2009 à 09:19:44    

Bonjour,
Merci pour la réponse.

  • La lenteur n'est pas un problème.
  • La solution ci-dessus n'est pas viable, car même si elle fonctionne la page d'accueil de site serait découpée en plus de 20 fichiers. D'autre part (cf ci-dessous), je pense que le problème est ailleurs.
  • Au sujet des IFRAME, de toute façon je ne crois pas les utiliser.
  • Etant novice, je n'ai aucune idée de ce qu'est AJAX.


Pour essayer de cerner au mieux le problème, j'ai fait des tests supplémentaires avec l'exemple suivant - plus complexe (voir code ci-dessous) - qui lui fonctionne correctement sous IE6:
http://x/download/ie6-2.png
 
 
Où peut bien être le problème si mon fichier hyper-simple a un bug, et cet exemple ci-dessous beaucoup plus complexe est affiché correctement par IE6 ??? !!!
 
 
Autre piste étrange: si dans l'exemple simple de mon premier post j'efface les fichiers "bg.html" et "main.html", on voit que IE ne vas même pas essayer d'ouvrir le fichier "bg.html" de la troisième colonne à droite:
http://x/download/ie6-3.png
Ce n'est pas le cas des autres navigateurs qui eux essaient d'ouvrir la page de droite (par exemple Chrome ci-dessous):
http://x/download/gc-1.png
 
 
 
============================================
Fichier principal de l'exemple plus complexe
============================================

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<HTML><HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
 
</HEAD><FRAMESET cols="*,300,*" frameborder="0" border="0">
 
<FRAME src="bg1.htm">
 
<FRAMESET rows="44,44,*" frameborder="0" border="0">
 
  <FRAMESET cols="*,50" frameborder="0" border="0">
    <FRAME src="bg2.htm" scrolling="no">
    <FRAME src="bg3.htm" scrolling="no">
  </FRAMESET>
 
  <FRAMESET cols="50,*" frameborder="0" border="0">
    <FRAME src="bg4.htm" scrolling="no">
    <FRAME src="bg5.htm" scrolling="no">
  </FRAMESET>
 
  <FRAMESET cols="200,*" frameborder="0" border="0">
    <FRAMESET rows="50,*" frameborder="0" border="0">
      <FRAME src="bg6.htm" border="0">
      <FRAME src="bg7.htm" scrolling="auto" >
    </FRAMESET>
    <FRAME src="bg8.htm" scrolling="auto" >
  </FRAMESET>
</FRAMESET>
 
<FRAME src="bg1.htm">
 
</FRAMESET></HTML>


============================================
Fichiers "bgX.htm", X=1, ..., 8
============================================

<HTML>
<body bgcolor="#FF0000">  
</BODY
></HTML>
 
<HTML>
<body bgcolor="#880000">  
aaaaaaaaa
</BODY
></HTML>
 
<HTML>
<body bgcolor="#FF00FF">  
bb bbbbbb bbbbb
</BODY
></HTML>
 
<HTML>
<body bgcolor="#FFFF00">  
ccccccc cc c c c c c
</BODY
></HTML>
 
<HTML>
<body bgcolor="#0000FF">  
dddddddd dddd d dd  
</BODY
></HTML>
 
<HTML>
<body bgcolor="#888888">  
eee e  e e ee  e e  
</BODY
></HTML>
 
<HTML>
<body bgcolor="#00FF00">  
fff ff f f f ff f
</BODY
></HTML>
 
<HTML>
<body bgcolor="#77FFAA">  
gggggg g g gg g  gg
</BODY
></HTML>


Message édité par CaseyAnders le 25-06-2009 à 10:09:02
Reply

Marsh Posté le 14-06-2009 à 10:22:24    

Ok.
AJAX permet de faire ce que tu veux ici mais sans frames, donc encore moins de fichiers si ça fait partie de tes soucis. (car au final tu n'a qu'un fichier HTML: le fichier index.html)
AJAX permet en faire de modifier ou de composer des morceaux de ta page. Tu peux afficher ou modifier un endroit de la page sans toucher au reste de la page.
 
Je me suis aperçu du non chargement sur la frame de droite, un click droit puis propriétés indique index.html
 
Et j'ai trouvé!
Je sais pourquoi l'exemple complexe fonctionne, il y a une différence.
L'exemple simple a une balise frameset qui contient une seule frame, alors que dans l'exemple complexe, chak balise frameset contient toujours au moins 2 éléments (2 frames ou alors 1 frame et 1 frameset).
Apparemment la balise frameset n'aime pas quand il y a qu'un seul élément.
Ajoute simplement une frame à ton frameset imbriqué (de nivo 2) sur 1er exemple, et ça marchera.
 
Et puis j'ai découvert un problème qui n'apparait ici; s'il y a des frameset imbriquer, d'un nivo d'imbrication à l'autre il fo alterner l'alignement:
<frameset cols="..."><frameset rows="...">...</frameset>...</frameset>
ou
<frameset rows="..."><frameset cols="...">...</frameset>...</frameset>  
mais pas
<frameset cols="..."><frameset cols="...">...</frameset>...</frameset>


Message édité par Corebreaker le 14-06-2009 à 10:25:12
Reply

Marsh Posté le 14-06-2009 à 10:50:31    

RESOLU - 1'000 mercis!
En effet, le problème venait de fait qu'il n'y avait qu'une balise dans certains frameset. En ajoutant des frame de taille 0 cela corrige le problème (j'avais besoin d'un seul frame dans un frameset car j'avais un frameset en rows qui contenait un unique autre frameset en cols):

<frameset rows="0,*" frameborder="0" border="0">
<frame src="" scrolling="no">
<frame src="menu.html" scrolling="no">
</frameset>


... enfin, si je puis me permettre d'apporter une remarque depuis mon statut de novice, je trouve cela totalement hallucinant que IE, avec (encore) 65% des parts de marché, soit le seul navigateur affecté par ce problème a priori complètement basique depuis au moins la version 6 (datant de 2001) jusqu'à la dernière version 8 sortie il y a quelques mois... ou peut-être n'ais-je alors rien compris à la manière de coder en html...


Message édité par CaseyAnders le 14-06-2009 à 11:09:15
Reply

Marsh Posté le 14-06-2009 à 11:18:00    

Bah c'est que Microsoft détient 65% des parts de marché des bugs.
 
Sinon est-ce vraiment un problème? Pour savoir il suffit d'aller sur le site de la W3C. La W3C est un consortium qui s'occupe entre autre de définir ce qui est légal en HTML. Après les navigateurs se doivent logiquement de suivre les standards, la réalité est autre chose. Mais normalement IE doit en principe suivre la W3C.
 
Et puis est-ce logique de mettre une seule frame dans un frameset, bah non, car autant ne pas utiliser un frameset si c'est pour mettre une seule frame.
 
Donc c'est un faux problème. Ou alors c'est un problème de conception et non pas de réalisation.
 
De tout cas, je te conseille de t'appuyer justement sur la W3C pour le HTML et ses amis. Que le navigateur ne suit pas le standard, ce n'est pas ton problème, en principe, s'il veut survivre, il se doit de suivre la W3C. Comme j'ai dis en principe IE le fais. Le problème que t'as eu n'est simplement qu'un problème d'implementation, mais si tu suis les recommandations de la W3C, tu seras certain de ne plus être confronté à ces petits soucis.

Reply

Marsh Posté le 14-06-2009 à 11:47:34    

En effet le code html a pu être épuré des frames uniques... Merci!


Message édité par CaseyAnders le 14-06-2009 à 11:49:03
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed