JAVASCRIPT: compatibilité sous IE5.2 mac

veacks

Membre enregistré
6 Décembre 2005
5
0
Bonjour,
Quelqu'un pourait il me dire comment je peux rendre compatible mes javascript sous IE5.2 pour osx sans avoir à mettre un message à l'internaute lui demandant de passer par un autre navigateur tel que Safari ou Firefox.

Y aurai-t-il une liste disponible sur internet contenant les fonctions qui ne sont pas portées sous IE5.2 ?

Quelqu'un c'est-il déjà attaqué à ce type de problème et me donner quelques pistes?
 
Les normes javascripts sont moins connues et moins accessibles que les normes html. Et c'est svt le JS qui pose des pb de compatibilité plus que le Html.
Il y a un moyen de valider les js :
1) utiliser Firefox ou Mozilla
2) ouvrir la page html contenant le js à tester
3) taper dans la barre de navigation :
javascript:
Alors la liste des erreurs javascripts s'affiche.

Maintenant il se peut que même validé il ne soit pas compatible IE
Concernant la compatiblité, il y a 3 types de scripts pour faire référence à une balise comme un div par ex. :
document.layer pour l'antique (mais précurseur) Netscape (ne plus utiliser :D).
document.all pour Internet Explorer (ne plus utiliser non plus ;))
document.getElementById, compréhensible par tous les navigateurs récents :up:
exemple

Concrètement j'utilise FireFox et je vérifie après avec tous les autres navigateurs (ce qu'on ne devrait pas avoir besoin de faire :D)

Suggestion : afficher ici un javascrit incompatible, pour qu'on corrige ;) !!
 
Merci Langellier pour ta réponse à mon problème.
J'ai déjà validé mes pages via le developper tool de Firefox, en fait mon problème est spécifique à IE5.2. Sur les autres navigateurs mes scripts fonctionnent très bien.

Pour te faire une confidence, je bosse sur pc, mais les personnes pour qui je travaille veulent que le site marche aussi sur IE5.2 mac vu que beaucoup d'utilisateur mac s'en servent encore (comme moi il y a plus d'un an)-ils sont prévenu que la tache sera difficile vu la très particulière (pour ne pas dire mauvaise) interprétation du code de ce navigateur-.

Pour te donner des exemples de codes :
Le Javascript:
/*
ceci est un code qui affiche un rellover contenant la légende sur mon menu
la variable id représente l'id de la div
la variable legend représente le txt de la légende du id concerné
l'id legend représente la div à afficher
*/
<script language="javascript">
<!--
// affiche la légende
function showLegend(id,legend)
{
document.getElementById("legend").style.left = ((findPosX(id) + id.offsetWidth) - 4) + "px";//findWidth(id)
document.getElementById("legend").style.top = (findPosY(id) - 15) + "px";
document.getElementById("legendContent").innerHTML = legend;
document.getElementById("legend").style.visibility = "visible";
}

//masque la légende
function hideLegend()
{
document.getElementById("legend").style.visibility = "hidden";
}

// find X pos
function findPosX(obj)
{
var curleft = 0;
if (obj.offsetParent)
{
while (obj.offsetParent)
{
curleft += obj.offsetLeft
obj = obj.offsetParent;
}
}
else if (obj.x)
curleft += obj.x;
return curleft;
}

// find Y pos
function findPosY(obj)
{
var curtop = 0;
if (obj.offsetParent)
{
while (obj.offsetParent)
{
curtop += obj.offsetTop
obj = obj.offsetParent;
}
}
else if (obj.y)
curtop += obj.y;
return curtop;
}
//-->
</script>


Le HTML :
/*cette div (legend) représente le rellover qui viendra ce superposer aux div présentées en dessous */
<div id="legend" class="legend" style="display:none;">
<div class="cornerLegendLeft"></div>
<div id="legendContent" class="legendContent"></div>
<div class="cornerLegendRight"></div>
</div>

/* ces quelques div représentent les liens et la surface sur laquelle le rellover viendra se superposer sur un "onmouseover"*/

<div onclick="window.location='collection.php?id=1';" onMouseOver="javascript:showLegend(this, 'Expect');" onMouseOut="javascript:hideLegend();" id="bout6" style="background-color:#8C511D;cursor:pointer;"><img src="images/1pix.gif" width="1" height="1" border=0 alt="off"></div>

<div onclick="window.location='collection.php?id=2';" onMouseOver="javascript:showLegend(this, 'Les Petites Fuites');" onMouseOut="javascript:hideLegend();" id="bout4" style="background-color:#ED1C24;cursor:pointer;"><img src="images/1pix.gif" width="1" height="1" border=0 alt="off"></div>

<div onclick="window.location='collection.php?id=3';" onMouseOver="javascript:showLegend(this, 'Le Jour et la Nuit');" onMouseOut="javascript:hideLegend();" id="bout17" style="background-color:#ED6D00;cursor:pointer;"><img src="images/1pix.gif" width="1" height="1" border=0 alt="off"></div>

<div onclick="window.location='collection.php?id=5';" onMouseOver="javascript:showLegend(this, 'Traps');" onMouseOut="javascript:hideLegend();" id="bout19" style="background-color:#4E341D;cursor:pointer;"><img src="images/1pix.gif" width="1" height="1" border=0 alt="off"></div>

LE CSS:
/*ces css représentent la div legend avec les images en fond (comme un cadre)*/

.legend { position:absolute; z-index:1; }
.legend .cornerLegendLeft { position:relative; background-image:url(images/img_gallerie/vignette_left.gif); background-repeat:no-repeat; float:left; width:10px; height:22px; }
.legend .legendContent { position:relative; background-image:url(images/img_gallerie/vignette_center.gif); background-repeat:repeat-x; float:left; height:22px; }
.legend .cornerLegendRight { position:relative; background-image:url(images/img_gallerie/vignette_right.gif); background-repeat:no-repeat; float:left; width:12px; height:22px; }


/*ces css representent les boutons du html ci dessus(j'en donne que deux ou trois, à part les valeurs ce sont les mêmes*/

DIV#bout6 { position:absolute; left:250px; top:90px; width:15px; height:15px; }
DIV#bout4 { position:absolute; left:185px; top:293px; width:45px; height:45px; }
DIV#bout17 { position:absolute; left:600px; top:350px; width:15px; height:15px; }
DIV#bout19 { position:absolute; left:648px; top:210px; width:36px; height:36px; }

ET le problème c'est que sous ie5.2 les images de fond du rellover (définies dans le fichier css) ne s'affichent pas
, j'ai essayé de mettre avec ou sans guillemet dans les url des background de "legend" de la css, j'ai aussi essayé de changer le "display: block/none" par "visibility: hidden/visible" sans changement.
 
En fait, je sais que ça na se fait pas mais je vais adopter la solution de facilité pour mon prblème, je vais faire un check browser pour forcer les utilisateurs de IE5.2 à utiliser un autre navigateur (parce que ci ce n'était qu'un problème de rellover ok, mais là j'ai encore une gallerie d'image assé couillu au niveau du javascript et il ne faut pas que ça prenne deux semaine pour 0.03% des gens seceptible de se connecter à ce site).

Je veins de trouver des informations assé intrigantes sur le net concernant ce navigateur, il n'est plus supporté depuis juin 2003, quand apple a sortie mac OSX, le devellopeur principal de IE5.2 est reparti semble-t-il à Dubai furieux et Microsoft à vendu à apple qu'une version béta du IE5.2 faute de plus.

Si vous voulez plus d'info je vous laisse le lien ici: http://news.com.com/2100-1045_3-1017126.html

voilà merci à plus