Les bugs que j'ai recensé à ce jour

  1. Cadres et JavaScripts dans Netscape 3
  2. Frames et fonction open.window()
  3. Comportement de la fonction history.back()
  4. Netscape et l'alignement des formulaires
  5. La propriété parent et Netscape 3
  6. Tag onunload et NE 4 (et les autres !)

 

 

Cadres et JavaScripts dans Netscape 3

Voici quelque lignes qui donnent des info sur le type de navigateur utilisé

Nom de votre navigateur :
<SCRIPT language="JavaScript">
document.write(navigator.appName)
</SCRIPT>
<BR>
Version :
<SCRIPT language="JavaScript">
document.write(navigator.appVersion)
</SCRIPT>

Première application dans un cadre : ca marche parfaitement

Nom de votre navigateur :
Version :

Second exemple Cadres imbriqués : le cadre précèdent est cette fois inséré dans la première cellule d'un autre cadre

Nom de votre navigateur :
Version :
La ca ne fonctionne pas avec NETSCAPE 3

Il m'en a coupté quelques heures de travail pour comprendre le pourquoi du non fonctionnement. Alors attention aux cadres imbriquées et NETCAPE 3. Je suppose que le problème se répète dans d'autres cas.

Frames et fonction open.window()

Une petite fonction sympa pour ouvrir une page dans un nouvelle fenetre du navigateur, paramétrable et de taille variable.

function ouvre_fenetre() {
window.open('sites.htm','sites','width=500,height=300,scrollbars=yes');
}

Essayons d'utiliser cette fonction.

Sites sur Javascript <a href="javascript:ouvre_fenetre()">Sites sur Javascript</a>

<form>
<p align="center"><input type="button" value=" Liens javascript "
onclick="ouvre_fenetre()"> </p>
</form>
<a href="javascript:ouvre_fenetre()">
<img src="liens.gif" align="absmiddle"
border="0" width="180" height="92"></a>

Vous constatez que le lien classique et le lien image ne fonctionnent pas et générent une erreur de la machine JAVA. En fait j'ai du provoquer cette erreur, mais elle aurrait lieu systèmatiquement si les liens avaient été situés dans le cadre sommaire.

Explications :

- Ce cadre est le cadre 'principal'
- le cadre de gauche est le cadre 'sommaire'
- Les pages sont écrites dans un language HTML chatié et le paragraphe HEAD de la page sommaire continet le TAG : <base target="principal">
- J'ai truqué cette page 'principal' en lui insérant un tag <base target="sommaire"> le navigateur va alors chercher le javascript dans le cadre désignée par le tag href= , soit dans le cadre sommaire, ou il n'existe pas

2 Solutions :

- suprimer le tag <base target="xxxx"> (attention de bien spécifier le tag target sur aperès chaque href)
- ajouter apres <a href="javascript:xxxx", target="frame ou est ecrit le script">

La première solution est préférable, les différents navigateur semblant réagir de façon un peu imprévisible à la seconde.

Comportement de la fonction history.back()

Une fonction bien pratique qui permet de revenir à la page précédente (à noter que history.go(-1) fait la même chose)

<form>
<center>
<p align="center"><input type="button" value=" Back "
onclick="history.back()"> </p>
</center>
</form>

Celui la fonctionne bien, mais essayez celui qui est situé sur le cadre sommaire (à gauche), cliquez plusieurs fois dessus, au début cela fonctionne bien, mais lorsque vous devez sortir des frames pour revenir à la page d'acceuil (drapeaux francais/anglais), voila ce qui se passe :

 

Netscape et l'alignement des formulaires

Prenons un formulaire tout simple, comme le précédent par exemple, et écrivons le de 3 façons différentes :

Normal

<form>
<p align="center"><input type="button"
value=" Back "
onclick="history.back()"> </p>
</form>
Autre possibilité

<form>
<center>
<p><input type="button" value=" Back "
onclick="history.back()"> </p>
</center>
</form>
Redondance

<form>
<center>
<p align="center"><input type="button" value=
" Back "
onclick="history.back()"> </p>
</center>
</form>

Avec NETSCAPE, dans le premier cas, le centrage du bouton ne se fait pas. Le deuxieme cas ne fonctionne que parce qu'il est placé à l'intérieur d'un tableau régis par le tag <div align=center> sinon il serait cadré à gauche Seul le troisième fonctionne.

Par contre IE réagis parfaitement dans les 3 cas.

Ce bug (HTML) est particulièèrement génant car les logiciels d'aide à la composition de pages (notement FRONTPAGE), suppriment automatiquement les redondances de codage HTML. Ce qui oblige à retoucher manuellement les pages après chaque modification dans un tel logiciel. Grrrrrrr........

La propriete parent et Netscape 3

Michael B. m'a consulté concernant un bug de netscape 3 sur ces pages, coici ce que j'ai découvert :
Attention, utilisateurs de de netscape 3 la consultation de l'exemple entrainera un plantage de votre machine !

Créons quelques pages pour illustrer le plantage :

bug5.htm

html>
<head>
<meta http-equiv="Content-Type" content="text/html; iso-8859-1">
<title>bug5</title>
</head>
<script language="Javascript">
var nb=0;
function test_bug() {
var doc = top.haut.window;
doc.document.write('<A HREF="javascript:parent.test_bug()">cliquez moi</A>');
nb = nb+1;
doc.document.write('<p>nombre de click : ');
doc.document.write(nb.toString());
doc.document.write('</p>');
doc.document.close();
}
</script>
<frameset rows="50%,50%">
<frame src="ebug5h.htm" name="haut" marginwidth="1" marginheight="1">
<frame src="ebug5b.htm" name="bas" marginwidth="1" marginheight="1">
</frameset>
</html>

ebug5h.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; iso-8859-1">
<title>Cadre haut</title>
</head>
<body>
<A HREF="javascript:parent.test_bug()">cliquez moi</A>
</body>
</html>

ebug5b.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; iso-8859-1">
<title>Cadre bas</title>
</head>
<body>
<A HREF="javascript:parent.test_bug()">cliquez moi</A>
<p>ATTENTION UTILISATEURS DE NETSCAPE 3, SI VOUS CLIQUEZ DANS LE CADRE DU HAUT, VOUS SEREZ OBLIGE DE REDEMARER VOTRE ORDINATEUR</p>
</body>
</html>

testons les

Apparement netscape 3 a un gros probleme de pile ! surprenant non ?

Voici la solution : placer le code javascript dans une troisieme frame qui sera cachée. Le code donne ceci :

sol5.htm

html>
<head>
<meta http-equiv="Content-Type" content="text/html; iso-8859-1">
<title>bug5</title>
</head>

<frameset cols="0,100%" border="0">
<frame src="ejv.htm" name="java">
<frameset rows="50%,50%">
<frame src="esol5h.htm" name="haut" marginwidth="1" marginheight="1">
<frame src="esol5b.htm" name="bas" marginwidth="1" marginheight="1">
</frameset>
</frameset>
</html>

esol5h.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; iso-8859-1">
<title>Cadre haut</title>
</head>
<body>
<A HREF="javascript:test_bug()" base target="java">cliquez moi</A>
</body>
</html>

esol5b.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; iso-8859-1">
<title>Cadre bas</title>
</head>
<body>
<A HREF="javascript:test_bug()" base target="java">cliquez moi</A>
<p>Cette version fonctionne corectement avec NETSCAPE 3</p>
</body>
</html>

ejv.htm

<script language="Javascript">
var nb=0;
function test_bug() {
var doc = top.haut.window;
doc.document.write('<A HREF="javascript:test_bug()" base target="java">cliquez moi</A>');
nb = nb+1;
doc.document.write('<p>nombre de click : ');
doc.document.write(nb.toString());
doc.document.write('</p>');
doc.document.close();
}
</script>

testons cette version

Tag onunload et NE 4 (et les autres !)

Je suis tombé par hasard sur un 'bug' touchant de manière diverse plusieurs navigateurs. Je souhaitai ouvrir une nouvelle fenetre automatiquement en en quittant une autre. Pour cela j'utilise le tag 'unload', soit après 'body', soit après 'frameset', les résultats sont surprenant.

Reste a savoir comment fonctionnent les versions MAC ?