IV Les principaux objets

 

         Comme vu précédemment, un certain nombre díobjets sont prédéfins par la somme javascript (Voir le DOM). Certains sont plus utilisés que díautres. Ce sont ceux-ci que nous allons découvrir.

 

IV.1 Líobjet window

 

         Cet objet est le parent de tous les autres.

Par défaut, si vous utilisez une méthodes ou une propriété sans préciser líobjet auquel elle se rattache, cíest alors à líobjet window quíelle est associée.

window.open() équivaut à open().

 

a. Les propriétés

 

1. Récupération des propriétés

 

Ces propriétés peuvent être récupérées en utilisant la fonction for déjà vu dans le chapitre précédent. Il faut juste supprimer de líaffichage à lëecran les éléments qui ne sont ps des propriétés comme les méthodes (function).

 

Attention

Les propriétés ne sont pas toutes gérées par les différents navigateurs. Certains respectent la norme (Mozilla, Netscape ..) et díautres non (Internet Explorer). Il existe des différences importantes qui ne facilitent pas le travail du développeur.

 

Ces différences sont présentées dans le tableau ci-dessous.

Les résultats proviennent de Netscape version 7.01, et IE version 6.0.

Mozilla version 1.1b utilise le même moteur que Nestcape et le résultat est identique. Les tests avec Opera et Konqueror níont pas permis díobtenir de résultats du fait certainement des privilèges appliquées sur ces deux navigateurs.

 

Netscape 7.01

 Internet Explorer 6.0

window.closed

window.content

window.controllers

window.crypto

window.defaultStatus

window.directories

window.frames

window.history

window.innerHeight

window.innerWidth

window.length

window.locationbar

window.menubar

window.name

window.opener

window.outerHeight

window.outerWidth

window.pageXOffset

window.pageYOffset

window.parent

window.personalbar

window.pkcs11

window.screen

window.screenX

window.screenY

window.scrollbars

window.scrollX

window.scrollY

window.self

window.sidebar

window.status

window.statusbar

window.toolbar

window.top

window.clientInformation

window.clipboardData

window.closed

window.defaultStatus

window.document

window.event

window.external

window.frameElement

window.frames

window.history

window.Image

window.length

window.location

window.name

window.navigator

window.offscreenBuffering

window.onafterprint

window.onbeforeprint

window.onbeforeunload

window.onblur

window.onerror

window.onfocus

window.onhelp

window.onload

window.onresize

window.onscroll

window.onunload

window.opener

window.Option

window.parent

window.screenLeft

window.screen

window.screenTop

window.self

window.status

window.top

window.window

 

Pour fournir un code portable il est de votre intérêt de ne pas privilégier líun ou líautre des navigateurs et par conséquent de níutiliser dans la mesure du possible que les propriétés communes aux deux navigateurs.

Le tableau ci-dessous indique ces propriétés communes.

 

Numéro du paragraphe

Propriétés communes à Netscape 7.01 et Internet Explorer 6.0

2

3

4

5

6

7

8

9

10

11

12

13

window.closed

window.defaultStatus

window.frames

window.history

window.length

window.name

window.opener

window.parent

window.screen

window.self

window.status

window.top

 

Remarque

Il est à noter que bizaremment la propriété document níest pas présente. Netscape et Mozilla ne la proposent pas même si cíest  une propriété importante du DOM.

 

Afin díobtenir ce tableau jíai utilisé le programme suivant exécuté sous les différents navigateurs et sauvegardé au format texte.

Jíai ensuite isolé les propriétés, ainsi que les objets que líon retrouve  aussi sous forme de propriétés. Une fois ceci effectué, jíai effectué une différence entre les deux fichiers (Netscape et IE) et tout ceci via un script shell sous Unix.

 

Le format brut des résultats est sous la forme suivante :

 

Ö

window.parent = [object Window]

window.top = [object Window]

window.scrollbars = [object BarProp]

window.name =

window.scrollX = 0

window.scrollY = 0

window.scrollTo = function scrollTo() { [native code] }

window.scrollBy = function scrollBy() { [native code] }

window.getSelection = function getSelection() { [native code] }

window.scrollByLines = function scrollByLines() { [native code] }

Ö

 

Le programme javascript est le suivant :

 

 

<HTML>

<HEAD>

</HEAD>

<BODY>

<script langage="javascript">

for(var i in window)

{

document.write("window."+i+" = " + window[i] + "<BR>");

}

</script>

</BODY>

</HTML>

 

2. closed

 

Cette propriété permet de tester líétat díune fenêtre ouverte ou fermée.

closed prend la valeur true si la fenêtre testée a été fermée.

Cette propriété est souvent utilisée en même temps que la méthode open() qui permet elle díouvrir une fenêtre afin de savoir si la fenêtre en question est bien ouverte.

 

Exemple

 

Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<HTML>

<HEAD>

</HEAD>

<BODY>

<script langage=javascript>

var fenetre=window.open("open.html","f2");

if(fenetre.closed)

{

 alert("Fenetre fermee ->valeur = " + fenetre.closed);

}

else

{

 fenetre.document.bgColor="blue";

 alert("Fenetre ouverte ->valeur = " + fenetre.closed);

 fenetre.close();

 if(fenetre.closed)

 {

  alert("Fenetre fermee ->valeur = " + fenetre.closed);

 }

}

</script>

</BODY>

</HTML>

 

 

Explications

La ligne 6 permet líouverture díune nouvelle fenêtre (objet fenetre) suite au chargement de la page qui contient le javascript.

La ligne 7 permet díeffectuer un test pour déterminer líétat de la nouvelle fenêtre.

Les lignes 13 à 18 permettent díenchaîner un ensemble díactions lorsque la nouvelle fenêtre est ouverte.

13 Mise en bleu du fond de cette nouvelle fenêtre

14 Avertissement de líouverture de la fenêtre

15 Fermeture de la nouvelle fenêtre

16 Nouveau test et affichage de líétat ´ fermé ª de la nouvelle fenêtre

 

3. Defautlstatus

 

Cette propriété concerne le contenu de  la zone située en dessous de la fenêtre díaffichage. Vous pouvez y insérer des informations textes.

Cíest à cet endroit que vous voyez généralement apparaître líadresse de líURL avant le clic sur le lien hypertexte (Figure 1) ou líinformation indiquant que le document est chargé (figure 2).

 

Figure 1

 

Figure 2

 

Vous pouvez aussi y faire défiler du texte au moyen díune petite astuce.

 

Exemple

 

Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<HTML>

<HEAD>

<script langage=javascript>

var msg=   "            Bienvenue sur mes pages Web,"

          +" Depechez vous ENTREZ ! ";

                       

function scroll_status()

{

 if(msg.length>0)

 {

  window.defaultStatus=msg;

  window.setTimeout('scroll_status()',100);

  msg=msg.substring(1,msg.length);

 }

 else

 {

  window.defaultStatus="--> Jacquenod Frédéric";

 }

}

</script>

</HEAD>

<BODY onload=scroll_status()>

 

</BODY>

</HTML>

 

 

Explications

Ligne 4 et 5 déclaration díune variable msg qui contient le texte qui va défiler.

Ligne 7 création díune fonction qui est activée lors du chargement de la page html (ligne 22).

Líastuce est díutiliser la propriété length de líobjet window et de supprimer la première lettre de la variable msg à chaque passage et ceci tant que la longueur de msg níest pas nulle (ligne 11 à 13).

Lorsque cette taille est nulle on affecte à la propriété defaultStatus une nouvelle valeur qui reste alors fixe dans la barre de status (voir copie díécran).

 

 

Capture écran

 

 

Attention

Il existe une propriété status (voir paragraphe 12). La différence est minime mais existe. Líeffet de la propriété DefaultStatus est permanente. Si un événement vient écrire par dessus le texte, une fois lëévénement terminé, líaffichage réapparaît. Cela montre aussi que la propriété status a priorité sur la propriété DefaultStatus.

 

4. frames

 

Cette propriété est un tableau qui contient les informations sur tous les codes en rapport avec votre fenêtre et donc avec líobjet window (voir aussi líobjet frame).

 

Attention

Il ne faut pas confondre la propriété frames avec líobjet Frame.

 

La création díune frame permet de décomposer votre page en plusieurs sous-ensemble díaffichage. Chaque sous-ensemble est alors ´ indépendant ª.

Pour cela les balises frameset et frame doivent être utilisées dans le fichier html chargé initialement pour effectuer ce découpage.

La fenêtre initiale est le parent des sous-fenêtres.

Ce parent est représenté par líobjet top qui dépend lui-même de líobjet window (Voir DOM).

La propriété frames correspond aux balises html frame.

 

Exemple

 

Nous découpons en trois zones une fenêtre afin díy afficher des contenus suivant líinteraction de líutilisateur sur le menu contenu dans la frame de gauche.

Le DOM de ce document  est le suivant :

 

Top

Ø    MenuGauche

Ø    contenuCentre

Ø    menuBas

 

Code (page de départ)

1

2

3

4

5

6

7

8

9

10

11

12

13

<HTML>

<HEAD>

<FRAMESET ROWS="90%,10%">

   <FRAMESET COLS="20%,80%">

      <FRAME SRC=menuGauche.html NAME="menuGauche">

      <FRAME SRC=contenuCentre.html NAME="contenuCentre">

   </FRAMESET>

   <FRAME SRC=menuBas.html NAME="menuBas">

</FRAMESET>

</HEAD>

<BODY>

</BODY>

</HTML>

 

Code (menu gauche -> menuGauche.html)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<HTML>

<HEAD>

</HEAD>

<BODY>

<U>haut droit</U><BR>

<INPUT TYPE=BUTTON

onclick="window.top.frames[1].location='http://www.google.fr'"

VALUE="Google !">

<BR>OU<BR>

<INPUT TYPE=BUTTON

onclick="top.frames[1].location='http://www.altavista.fr'" VALUE="Altavista !">

<BR>OU<BR>

<INPUT TYPE=BUTTON

onclick="top.contenuCentre.location='http://www.yahoo.fr'" VALUE="Yahoo !">

<BR><BR><U>bas droit</U><BR>

<INPUT TYPE=BUTTON

onclick="top.frames[2].contenuBasCentre.location='http://www.lycos.fr'" VALUE="Lycos !">

<BR>OU<BR>

<INPUT TYPE=BUTTON

onclick="top.menuBas.contenuBasCentre.location='http://www.netscape.fr'" VALUE="Netscape !">

</BODY>

</HTML>

 

 

Explications

Lorsque vous cliquez sur un des boutons du menu de gauche, la page díaccueil du moteur de recherche choisi síaffiche dans la frame de droite (contenuCentre).

 

 

Captures écran

 

 

Remarque

Les propriétés, méthodes et objet rattachés au tableau frames sont les mêmes que pour window. En effet, la frame est elle-même une fenêtre. Il suffit donc de tout préfixer par le nom de cette frame pour atteindre les éléments de cette frame.

 

Remarque

Une frame peut elle-même à nouveau être décomposée en frame. Le schéma est alors un peu plus complexe. Par contre la méthode díaccès est la même.

 

 

Exemple

 

Reprenons lëexemple précédent en ajoutant un découpage en deux dans la frame du bas.

Le DOM de ce document  est le suivant :

 

Top

Ø    menuGauche

Ø    contenuCentre

Ø    menuBas

-       menuBasGauche

-       contenuBasCentre

 

Ou graphiquement

 

 

Code (page de départ)

1

2

3

4

5

6

7

8

9

10

11

12

13

<HTML>

<HEAD>

<FRAMESET ROWS="90%,10%">

   <FRAMESET COLS="20%,80%">

      <FRAME SRC=menuGauche.html NAME="menuGauche">

      <FRAME SRC=contenuCentre.html NAME="contenuCentre">

   </FRAMESET>

   <FRAME SRC=menuBas.html NAME="menuBas">

</FRAMESET>

</HEAD>

<BODY>

</BODY>

</HTML>

 

 

Code (frame menu gauche -> menuGauche.html)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<HTML>

<HEAD>

</HEAD>

<BODY>

<U>haut droit</U><BR>

<INPUT TYPE=BUTTON

onclick="window.top.frames[1].location='http://www.google.fr'"

VALUE="Google !">

<BR>OU<BR>

<INPUT TYPE=BUTTON

onclick="top.frames[1].location='http://www.altavista.fr'" VALUE="Altavista !">

<BR>OU<BR>

<INPUT TYPE=BUTTON

onclick="top.contenuCentre.location='http://www.yahoo.fr'" VALUE="Yahoo !">

<BR><BR><U>bas droit</U><BR>

<INPUT TYPE=BUTTON

onclick="top.frames[2].contenuBasCentre.location='http://www.lycos.fr'" VALUE="Lycos !">

<BR>OU<BR>

<INPUT TYPE=BUTTON

onclick="top.menuBas.contenuBasCentre.location='http://www.netscape.fr'" VALUE="Netscape !">

</BODY>

</HTML>

 

 

Code (page frame bas -> menuBas.html)

1

2

3

4

5

<HEAD>

   <FRAMESET COLS="20%,80%">

      <FRAME SRC=menuBasGauche.html NAME="menuBasGauche">

      <FRAME SRC=contenuBasCentre.html NAME="contenuBasCentre">

   </FRAMESET>

</HEAD>

 

 

Code (page frame base droite -> contenuBasCentre.html)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<HTML>

<HEAD>

</HEAD>

<BODY>

<U>haut droit</U><BR>

<INPUT TYPE=BUTTON

onclick="window.top.frames[1].location='http://www.google.fr'" VALUE="Google !">

<BR>OU<BR>

<INPUT TYPE=BUTTON

onclick="top.frames[1].location='http://www.altavista.fr'" VALUE="Altavista !">

<BR>OU<BR>

<INPUT TYPE=BUTTON

onclick="top.contenuCentre.location='http://www.yahoo.fr'" VALUE="Yahoo !">

<BR><BR><U>bas droit</U><BR>

<INPUT TYPE=BUTTON

onclick="top.frames[2].contenuBasCentre.location='h