Fiche DOM : objet window - PopUp -Objet de la ficheÉtat de la fiche
|
| Propriétés et méthodes | Commentaires |
|---|---|
| window.open() | ouverture d'une fenêtre supplémentaire (popup) |
| window.close() | fermeture d'une fenêtre |
| window.focus() | donne le focus à la fenêtre |
| window.opener | référence de la fenêtre mère. |
Une popup est ouverte grâce à la méthode (ou fonction) open() appelée sur l'objet window. Cette fonction attend 3 paramètres et retourne l'identifiant de la fenêtre qui vient d'être ouverte. Cet identifiant sera stocké dans une variable de travail (resultat par exemple) afin d'être utilisé ultérieurement dans le script. Si l'ouverture ne peut pas se faire la méthode retourne NULL.
resultat = window.open( url,nom,options)
Note(1) : Sans le paramètre nom, un nouveau popup est ouvert à chaque fois.
Note(2) : Certaines combinaisons peuvent être interprétées différemment en fonction des navigateurs utilisés.
resultat= window.open( 'Demos/DOM_Demo_Window_Popup00.htm', 'testpopup', 'width=250,height=150,top=50,left=50')
| options | actions | valeurs | valeurs défaut |
|---|---|---|---|
| width (1) | largeur de la fenêtre | nombre pixels | 250 pixels |
| height (1) | hauteur de la fenêtre | nombre pixels | 150 pixels |
| top | position de la fenêtre par rapport au haut de l’écran | nombre pixels | |
| left | position de la fenêtre par rapport au bord gauche de l'écran | nombre pixels | |
| toolbar | afficher la barre d’outils du navigateur | 1 ou yes (oui) l'affiche 0 ou no (non) la cache |
yes |
| menubar | afficher la barre de menu du navigateur | ||
| location | afficher la barres d’adresse du navigateur | ||
| scrollbars | afficher les ascenseurs du navigateur, | ||
| resizable | autoriser le dimensionnement de la fenêtre | ||
| directories | afficher la barre des liens | ||
| status | afficher la barre d’état | ||
| fullscrenn | mettre la fenêtre en plein écran | ||
| channelmode | mettre la fenêtre en plein écran avec raccourcis de barre d’outil (même résultat qu’utilisation de la touche F11) |
Note (1)
Définir une hauteur et une largeur désactive automatiquement la barre
d'adresse, d'outils ... sur la plupart des navigateurs. Si vous désirez donc
avoir une fenêtre de 500px * 500px et avoir la barre d'adresse, il est
préférable de préciser tous les paramètres ou du moins "ceux qui vous
importent le plus, avec la valeur qui convient.
Les exemples sont donnés pour les caractéristiques générales suivantes :
URL : 'Demos/DOM_Demo_Window_Popup00.htm'
Nom : 'testpopup'
Options 'width=250,height=150,top=50,left=50'
Réglez les autres paramètres de la fenêtre popup
| toolbar | menubar | location | scrollbars | resizable |
| directories | status | fullscrenn | channelmode |
puis cliquez sur le bouton
Des résultats identiques pour tous les navigateurs ne sont pas
garantis. Voici ci-dessous 2 exemples :
| Aperçu des options avec le navigateur Internet explorer |
![]() |
| Aperçu des options avec le navigateur Firefox |
![]() |
Nous allons utiliser une propriété de l'objet screen (que nous verrons dans une fiche suivante) qui donne la hauteur et la largeur disponibles pour l'écran de l'utilisateur.
Remarque sur le code : avant toute ouverture de popup on vérifie si un popup n'est pas déjà ouvert avec la même référence (fonction _FermePopup(_id)).
On utilise les méthodes close() et closed de l'objet window
Le popup devra comporter un bouton ou un lien permettant cette action. Par exemple : <a onclick="window.close()"> Fermer la fenêtre</a>
La syntaxe est : identificateur de la fenêtre.window.close() . L'identificateur de la fenêtre est la valeur renvoyée lors de l'ouverture de la fenêtre par window.open().
Si l'on teste un popup pour savoir s'il est ouvert ou fermé (ce qui peut se produire lorsque plusieurs fenêtres additionnelles sont ouvertes simultanément) une erreur va être générée sur certains navigateurs. Pour traiter correctement cet état il convient de créer une fonction générale que l'on pourra appeler par exemple _IsPopupClosed(_id) dans laquelle le paramètre _id est l'identificateur de la fenêtre additionnelle (renvoyée lors de l'ouverture de la fenêtre par window.open()) que l'on désire tester. La fonction retourne true si le popup est déjà ouvert, false dans tous les autres cas. On utilise try{....} catch(e) {...} (instructions de traitement des erreurs) pour se prémunir contre toute surprise.
Si on tente de fermer un popup qui n'a pas été préalablement ouvert une erreur va être générée sur certains navigateurs. Pour traiter correctement cet état il convient de créer une fonction générale que l'on pourra appeler par exemple _FermePopup(_id) dans laquelle le paramètre _id est l'identificateur de la fenêtre (renvoyée lors de l'ouverture de la fenêtre par window.open()) que l'on désire fermer.
function _FermePopup(_id) {
On utilise ici la fonction_IsPopupClosed(_id) décrite ci dessus.
Lorsqu'une fenêtre est ouverte depuis une autre fenêtre, elle conserve une référence à cette première fenêtre avec window.opener. Si la fenêtre courante n'a pas été ouverte par une autre fenêtre, la méthode renvoie null.
Syntaxe générale : window.opener.PROPRIETE
Exemple avec l'utilisation de la propriété getElementById() de l'objet document que l'on va appliquer à la couleur du titre de la page mère. Dans la page mère le titre est repéré par l'identificateur (id) "id_h1opener".
window.opener.window.document.getElementById('id_h1opener').style.color = 'green'
Syntaxe générale : identificateurFenêtre.PROPRIETE . L'identificateur de la fenêtre est la valeur renvoyée lors de l'ouverture de la fenêtre par window.open(). Si on reprend l'exemple PROPRIETE comme défini précédemment et id_MonPopUp comme identificateur de la fenêtre le code sera :
id_MonPopUp.window.document.getElementById('id_h1popup').style.color = 'green'.
On peut très bien ouvrir une fenêtre popup, puis cliquer sur la fenêtre principale. Celle-ci redevient la fenêtre active et on dit qu'elle prend le « focus ». Elle passe au premier plan et masque le popup, partiellement ou complètement. Cependant, par la suite, on peut cliquer sur un autre lien et recharger la même fenêtre popup avec une autre page. Logiquement, ce popup devrait alors reprendre le « focus », c'est-à-dire repasser au premier plan. Il n'en est pas toujours ainsi, selon les navigateurs, lorsque ce popup est resté ouvert. Pour s'assurer qu'il reprend le focus, il suffit d'ajouter la ligne suivante dans le code HTML du popup:
On peut voir l'intérêt d'une telle action en revenant sur l'exemple précédent concernant les interactions. Le popup initialement ouvert disparaît lors de la sélection de la couleur dans la liste déroulante de la page principale. Lorsque la sélection est terminée le popup réapparaît avec la modification demandée. Normalement après la sélection le popup ne devrait pas réapparaître :la couleur du titre est bien modifiée mais le popup reste en arrière plan. On peut donc si on le désire associer identificateurFenêtre.window.focus() à l'action selection-click pour repasser le popup au premier plan.
var etatFocus = window.focus ou var etatFocus = identificateurFenêtre.window.focus
La valeur renvoyée est un booléen =true si la fenêtre a le focus ou false si la fenêtre n'a pas le focus.
Lorsque l’on ouvre un popup de manière classique, on fait appel à une page web dejà construite que l’on affiche dans la nouvelle fenêtre. Il est cependant également possible d'en fabriquer dynamiquement le contenu.
On dira d'un popup qu'il est classique s'il fait appel à une url bien définie, par opposition aux popup dynamiques qui ne s'adressent pas à une url définie mais créent eux même leur propre espace.
Dans un premier temps un ordre de déclenchement de popup va être donné à partir de la page en cours (1). Un script va être exécuté dans la page en cours :
Le navigateur va ensuite afficher le contenu html sous forme de page web : le popup (7).

Imaginons que l'on veuille créer un popup dont le contenu serait le suivant :
| Web | Équivalent HTML |
HelloJe suis un popup dynamique |
|
Le résultat suivant montre la génération d'un popup dynamique ainsi que le code correspondant.
Dans la page mère on va créer la fonction d'ouverture du popup (OuvreMonPopUp))en prenant soin de déclarer la variable identification de la fenêtre (id_MonPopUp) en tant que variable globale. Cette fonction sera appelée par un click sur le bouton "Ouvrir le popup" de la page mère.
id_MonPopUp =window.open("", 'MonPopUp', 'width=250, height=150, toolbar=no, scrollbars=no, resizable=no');
Après ouverture la fenêtre du popup sera référencée par rapport à id_MonPopUp.
Pour insérer le code HTML du popup on va utiliser la méthode write() relative à l'objet document lui même relatif à l'identificateur de fenêtre. On remarquera que la feuille de style du popup est elle aussi insérée par la méthode write.
Attention à l'imbrication des quottes ou double quottes dans la
syntaxe de la méthode write.
A la fin de l'insertion du code du popup par la méthode write() on
fermera la séquence d'écriture par la fonction id_MonPopUp.document.close().
Remarquez le '\n' en fin de chaque ligne générée par document.write(). \n introduit un retour après chaque ligne du contenu HTML du popup, ceci est tout à fait facultatif mais le curieux désirant consulter le code source du popup (click droit sur le popup, puis Afficher la source) y trouvera un texte structuré.
Il est intéressant de pouvoir faire apparaître des images sous forme de popup, toutefois afin d'éviter des effets disgracieux (popup trop grand ou trop petit par rapport aux dimensions de l'image) il faut adapter automatiquement la taille du popup à la taille de l'image.
On crée un popup dynamique tel que décrit ci dessus dans lequel est inclus le script de dimensionnement automatique .
Le test est activé automatiquement lorsque la page HTML est totalement chargée (onload='checksize()) de façon à être certain que la balise img du body est bien initialisée (même si l'image elle même n'est pas totalement chargée).
Lorsque l'image est totalement chargée (test sur document.images[0].complete) on applique un window.resizeTo() à la fenêtre avec une largeur et hauteur de l'image auxquelles ont rajoute 5 (px) pour la largeur et 30 (px) à la hauteur pour éviter de rogner l'image.
La Boutique du Fleuriste est une société de vente de fleurs en ligne mais possède aussi une activité de voyagiste via son site boutiquedufleuriste-voyage.com. Lorsque l'on accède à La Boutique du Fleuriste il serait intéressant de faire connaître aux internautes qu'il existe aussi cette activité voyage. Dans un premier temps l'exercice consiste à faire apparaître un popup en même temps que la page d'accueil.
Pour cela on va créer une page html qui sera le popup et que l'on
nommera popupvoyage.htm , que l'on placera dans la racine du site (au même niveau que index.html). Le popup contiendra une image popupVoyage.png située dans le répertoire Images/Site et un bouton Fermer que l'on situera en bas à droite.
Le déclenchement de l'apparition du popup est réalisé à la fin du chargement de la page principale (index.html) sur l'évènement onload (sur body) que l'on verra plus tard et dont voici la syntaxe :
<body onload="window.open( 'popupvoyage.htm', 'Pub', 'width=285,height=320,top=50,left=50')">
Le résultat doit donner un popup du style ci-dessous.
