Commencez le test en vous rendant sur la page suivante :
Attribut HTML onload
sur l'élément BODY
Le module Évènements
du DOM
niveau 2 du W3C
(DOM2 Events) définit ainsi l’évènement
load :
L’événement load survient quand l’implémentation DOM achève le chargement de tout le contenu d’un document, tous les cadres dans un élément FRAMESET ou OBJECT.
Dans le même temps, l’évènement unload quant à lui est clairement défini comme étant utilisable sur l’élément BODY. Bref, assez flou tout ça…
Le module Évènements
du DOM niveau 3
(DOM3 Events) est beaucoup plus clair :
The DOM Implementation finishes loading the resource (such as the
document) and any dependent resources (such as images, style sheets, or scripts).
Dependent resources that fail to load will not prevent this event from firing if the
resource that loaded them is still accessible via the DOM. If this
event type is dispatched, implementations are required to dispatch this event at least
on the Document
node.
Il fournit même la liste précise des éléments HTML sur lesquels peut être enregistré l’évènement load :
.HTMLDocument
, HTMLBodyElement
, HTMLFrameSetElement
,
HTMLObjectElement
, HTMLLinkElement
, HTMLMetaElement
,
HTMLScriptElement
, HTMLFrameElement
, HTMLIFrameElement
,
HTMLImageElement
HTMLBodyElement
(quelque soit le mécanisme)currentTarget
et target
(ou leurs équivalents dans l’API microsoftienne pour MSIE)
référencent l’objet HTMLBodyElement
HTMLDocument
(quelque soit le mécanisme)currentTarget
et target
(ou leurs équivalents dans l’API
microsoftienne pour MSIE) référencent l’objet HTMLDocument
Window
via l’attribut
HTML ou JS
onload
currentTarget
et target
(ou leurs équivalents dans l’API
microsoftienne pour MSIE) référencent respectivement l’objet Window
et l’objet HTMLDocument
(en effet, ce n’est pas la fenêtre qui est
chargée mais le document). L’enregistrement sur l’objet Window
de l’évènement load est ici toléré pour des raisons de compatibilité.Window
via
l’API du
W3CWindow
ne fait pas partie de la liste donnée dans le module
Évènementsdu DOM niveau 3 (DOM3 Events)
Le jeu de test ne couvre que le support de l’évènement load sur l’élément
BODY et sur les objets HTMLDocument
et Window
.
Navigateurs et versions |
body | document | window | |||||
---|---|---|---|---|---|---|---|---|
attr. html | attr. js | DOM | attr. js | DOM | attr. js | DOM | ||
Mozilla | 1.7 | bugué | échec | échec | échec | échec | OK | échec |
1.4 | ||||||||
MSIE | bugué | bugué | échec | échec | échec | bugué | MS | |
Opera | 7.60 | OK | OK | OK | OK | OK | bugué | OK |
7.23 | OK | OK | OK | OK | OK | bugué | OK | |
Safari | 1.3 | |||||||
1.2 | ||||||||
1.1 | ||||||||
Konqueror | xxx |
Mozilla ne gère l’évènement load sur l’élément BODY
qu’au travers de l’attribut
HTML onload
. Et encore donne t-il des informations erronées
sur l’évènement déclenché puisqu’il indique le document comme cible de l’évènement
et la fenêtre comme étant l’objet sur lequel a été enregistré le guetteur
(NdM : On ne partage pas mon avis sur le
bugtracker de Mozilla.
Bug 257556).
Opera gère parfaitement cet évènement et fournit les bonnes informations sur l’évènement déclenché.
IE gère l’évènement
load via les attributs HTML et JS
onload
, par contre, il fournit une information erronée concernant
l’objet cible de l’évènement (Pas d’équivalent à currentTarget
, et
srcElement
vaut null).
HTMLDocument
Quelque soit le fonctionnement adopté, ni IE ni Mozilla ne
gèrent l’évènement load sur le document
. Opera gère
parfaitement cela.
Window
Mozilla déclenche l’évènement qu’il soit enregistré via l’attribut JavaScript onload
ou l’API du
W3C. Les attributs d’évènement currentTarget
et target
ont les bonnes valeurs.
Opera ne déclenche l’évènement que s’il est enregistré via l’attribut JavaScript
onload
ou via l’API propriétaire de Microsoft (??). target
a la bonne valeur, en revanche, currentTarget
référence l’objet
HTMLDocument
.
Avec IE, srcElement
vaut null. L’évènement est également
déclenché en passant par l’API propriétaire de Microsoft.
Opera est le navigateur qui s’en sort le mieux. Attention cependant, il semble
avoir une gestion très tordue de cet évènement. En effet, il ne déclenche pas
l’évènement load si vous affichez la page en ayant utilisé le mécanisme
précédent
ou suivant
dans le navigateur, et affiche la page dans l’état
exact dans lequel vous l’avez quittée (Modifications faites sur le document par le
DOM comprises) !
Encore plus fort, tous les objets initialisés ou modifiés normalement pendant cet
évènement sont néanmoins bien présents et utilisables ! Vous pouvez, si vous
avez Opera sous la main, constater la chose sur la page Les mystères
de Opera
.
Le fait que le document et les scripts qui lui sont liés semblent exactement dans le même état que si l’on avait tout simplement pas quitté la page explique pourquoi je n’en ai pas tenu compte dans le tableau des résultats.