TUTORIELS 
Une fenêtre popup qui adapte sa taille à son contenu
Un code Javascript permettant d'adapter la taille d'une fenêtre popup à celle de l'image qu'elle est destinée à afficher.  (21 février 2003)
 

L'objet window de Javascript propose une méthode permettant de très simplement d'ouvrir une fenêtre popup avec du contenu HTML ou non: window.open(). Beaucoup plus puissante qu'un simple target="_blank" dans un lien HTML, window.open() permet de contrôler de nombreux aspects de la fenêtre ouverte: sa position, sa taille, ses barres de défilement, ses boutons... Malgré cela, cette méthode ne dispose pas d'arguments pour adapter automatiquement sa taille à son contenu. C'est le but d'une autre méthode, window.resizeTo(), que nous allons utiliser ici.

resizeTo() ne pouvant s'appliquer qu'à la fenêtre en cours d'utilisation, nous aller créer une fonction Javascript qui ouvrira une fenêtre avec la méthode open() et y écrira le code de la page HTML affichant notre image de manière dynamique, cette page HTML ayant dans sa balise <body> un évènement onLoad() qui déclenchera la méthode resizeTo() que l'on aura déclaré au sein de ce HTML.

Pour clarifier, procédons ainsi: nous avons besoin que la fenêtre qui contient notre image s'adapte automatiquement à la taille de l'image. Nous devons donc créer une fonction Javascript faisant appel à resizeTo(), cette fonction se trouvant entre les balises <head> de la page HTML contenant notre image. Notre fonction Javascript sera déclenchée par l'évènement onLoad de la balise <body>, de sorte que notre fonction ne sera appellée que lorsque l'ensemble de la page sera chargée. Voici le script en question:

<script language='JavaScript'>
<!--
IE5=NN4=NN6=false
if (document.all)
  IE5=true;
else if (document.getElementById)
  NN6=true;
else if (document.layers)
  NN4=true;

function autoSize()
  {
  if (IE5) self.resizeTo(document.images[0].width+10,
document.images[0].height+31);
  else if (NN6) self.sizeToContent();
  else window.resizeTo(document.images[0].width,
document.images[0].height+20);
  self.focus()
  }
-->
</script>

Comme de bien entendu, chaque navigateur gère les fenêtres d'une manière différente, il nous faut donc tester d'entrée de jeu si certains objets ou méthodes existent afin d'envoyer au navigateur le code qui lui correspond. Par exemple, s'il se trouve que le script a affaire à Netscape 6, il utilisera la méthode spécifique sizeToContent(), plutôt que resizeTo()... Dans les autres cas, des valeurs sont ajoutées aux tailles afin prendre en compte les interfaces de chaque navigateur.

Maintenant que nous connaissons le contenu de notre page HTML se trouvant dans notre fenêtre pop-up, nous devons créer cette fenêtre pop-up, y placer dynamiquement le contenu HTML, à l'aide de la méthode document.write().

Voici donc notre code en entier:

(fichier resizepopup.htm)
<script language="JavaScript">
<!--
function resizePopUp(monImage, monTitre)
  {
  w = window.open('','chargement','width=10,height=10');
  w.document.write( "<html><head><title>"+monTitre+"</title>\n" );
  w.document.write( "<script language='JavaScript'>\n");
  w.document.write( "IE5=NN4=NN6=false;\n");
  w.document.write( "if(document.all)IE5=true;\n");
  w.document.write( "else if(document.getElementById)NN6=true;\n");
  w.document.write( "else if(document.layers)NN4=true;\n");
  w.document.write( "function autoSize() {\n");
  w.document.write( "if(IE5) self.resizeTo(document.images[0].width+10,
document.images[0].height+31)\n");
  w.document.write( "else if(NN6) self.sizeToContent();\n");
  w.document.write( "else window.resizeTo(document.images[0].width,
document.images[0].height+20)\n");
  w.document.write( "self.focus();\n");
  w.document.write( "}\n</scri");
  w.document.write( "pt>\n");
  w.document.write( "</head><body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 onLoad='javascript:autoSize();'>" );
  w.document.write( "<a href='javascript:window.close();'><img src='"+monImage+"' border=0 alt='"+monTitre+"'></a>" );
  w.document.write( "</body></html>" );
  w.document.close();
  }
-->
</script>

Nous avons ajouté la méthode window.close() en lien direct sur l'image, afin que la fenêtre se ferme lorsque l'on clique sur l'image...

Il ne nous reste plus qu'à composer notre code HTML:

<body bgcolor="#FFFFFF">
Cliquez sur l'un de ces liens:
<hr align="left" width="175">
Une <a href="#" onClick="resizePopUp('petite.gif','Petite image');">petite</a> image.<br>
Une image <a href="#" onClick="resizePopUp('moyenne.gif','Image moyenne');">moyenne</a>.<br>
Une <a href="#" onClick="resizePopUp('grande.gif','Grande image');">grande</a> image.
</body>

Ce script est visible ici, et nos fichiers sources se trouvent ici.

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page