TUTORIEL CLIENTS WEB 
Javascript : un bookmarlet pour lister les images d'une page et leur poids
Retour sur un grand classique du JDN Développeurs, afin de lui apporter des améliorations nécessaires. (03/04/2004)

 


Nous reprenons ici le code de notre bookmarlet nous permettant lister les images d'une page web et leur poids. Ce bookmarlet fonctionnait très bien, sauf pour un détail d'importance : il ne retirait pas les doublons du calcul, et affichait donc toutes les occurences d'une image dans la page. Cela ne posait pas problème pour les pages conçues avec des occurences uniques d'images (comme certains sites en CSS complet), mais cela fausait le calcul dès qu'une page utilisait une mise en page à base de pixels transparents, par exemple.

Notez que pour calculer la taille, nous utilisons la méthode propriétaire .fileSize, qui a notre connaissance n'existe que sous Internet Explorer et n'a pas d'équivalence dans les autres navigateurs. Ce bookmarlet est donc "limité" au marché de IE.
Nota : une limite à 255 caractères des URLs stockées par certaines versions de IE6 fait que ce bookmarlet ne marchera probablement pas sur celles-ci...

Voici donc le code de notre bookmarlet, mis en page pour cet article (il devrait pour fonctionner tenir sur une seule ligne) :
html = '';
poidsTotalImages = 0;
poidsFichier = 0;
imagesPassees = new Array();
poidsFichier = document.fileSize*1;

html += '<html><body><table width=100% cellspacing=1>';

for (i = 0; i < document.images.length; i++)
  {
  j=0;
  flag=0;
  k = imagesPassees.length;

  while (j <= k)
    {
    if ( (imagesPassees[j] == document.images[i].src) || (document.images[i].fileSize == '-1') )
      {
      flag=1;
      }
    j++;
    }

  if (document.images[i].fileSize == '-1')
    { imagesCassees++; }

  if (flag == 0)
    {
    imagesPassees.push(document.images[i].src);

    poidsImageEnCours = parseInt(document.images[i].fileSize);
    poidsTotalImages += poidsImageEnCours;

    html += '<tr><td width=45%><div align=right><font face=Verdana size=1>'
    html += document.images[i].src;
    html += '</font></div></td>';
    html += '<td width=10%><font face=Verdana size=1><b>';
    html += poidsImageEnCours;
    html += ' octets</b></font></td>';
    html += '<td width=45%><img src=' + document.images[i].src + '></td></tr>';
    }
  };

html += '<tr><td><font face=Verdana size=1><b>Poids total des images: ';
html += poidsTotalImages;
html += ' octets pour ';
html += imagesPassees.length;
html += ' images</b></font></td><tr>';

html += '<tr><td><font face=Verdana size=1><b>Poids de la page: ';
html += poidsFichier;
html += ' octets';
html += '</b></font></td><tr>';

poidsDuTout = poidsFichier+poidsTotalImages;

html += '<tr><td><font face=Verdana size=1><b>Poids du tout: ';
html += poidsDuTout;
html += ' octets';
html += '</b></font></td><tr>';

if (imagesCassees > 0)
  {
  html += '<tr><td><font face=Verdana size=1><b>Nota: ';
  html += imagesCassees;
  if (imagesCassees > 1)
    {
    html += ' images n\'ont pas été prises en compte car elles étaient inaccessibles ou absentes.';
    }
  else
    {
    html += ' image n\'a pas été prise en compte car elle était inaccessible ou absente.';
    }
  html += '</b></font></td><tr>';
  }


html += '</table></body></html>';

document.write(html);


Vous pouvez tester ce bookmarlet directement ou le glisser parmi vos favoris...


 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page