La discussion ancienne mais pour ce problème particulier, on ne trouvait pas de solution simple qui fonctionne.
J'ai trouvé une solution en utilisant des cookies.
Principe :
- Javascript récupère la largeur et la hauteur de la fenêtre et l'enregistre dans des cookies valables jusqu'à la fermeture du navigateur.
- PHP récupère les valeurs inscrites dans ces cookies.
En mettant le tout dans un seul fichier PHP, ça donne :
Code :
- <html>
- <head>
- <title>Détermination et affichage de la taille de la fenêtre du navigateur</title>
- <meta name=author content="Bernard Chardonneau">
- <meta name=copyleft content="Téléchargement autorisé">
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- </head>
- <body>
- <script>document.cookie = "largeur=" + window.innerWidth + "; expires=0"</script>
- <script>document.cookie = "hauteur=" + window.innerHeight + "; expires=0"</script>
- <?php
- if (isset ($_COOKIE ['largeur']))
- {
- echo " Largeur = ".$_COOKIE ['largeur']." pixels<br/>\n";
- if (isset ($_COOKIE ['hauteur']))
- echo " Hauteur = ".$_COOKIE ['hauteur']." pixels<br/>\n";
- else
- echo " Hauteur non disponible, réafficher la page<br/>\n";
- }
- else
- {
- if (isset ($_COOKIE ['hauteur']))
- {
- echo " Hauteur = ".$_COOKIE ['hauteur']." pixels<br/>\n";
- echo " Largeur non disponible, réafficher la page<br/>\n";
- }
- else
- {
- echo " Largeur et hauteur non disponibles, réafficher la page<br/><br/>\n";
- echo " Si ça ne marche toujours pas vérifiez les points suivants :\n";
- echo " <ul>\n";
- echo " <li>votre navigateur web doit accepter les cookies</li>\n";
- echo " <li>votre navigateur web doit utiliser javascript</li>\n";
- echo " <li>votre navigateur web doit être compatible</li>\n";
- echo " </ul>\n";
- }
- }
- ?>
- </body>
- </html>
|
L'exécution de cette page permet de comprendre le mécanisme de fonctionnement :
- La première fois que la page est affichée, la taille de la fenêtre n'est pas connue.
- Si on recharge la page, on récupère ses dimensions.
Maintenant, modifions la taille de la fenêtre.
Il faudra recharger la page 2 fois pour en voir les nouvelles dimensions.
- La première fois, javascript récupère les nouvelles dimensions de la fenêtre.
- La fois suivante, PHP affiche les dimensions mesurées.
Si on a besoin d'avoir l'information du premier coup, on peut faire une page de redirection.
Fichier det_taille.html
Code :
- <html>
- <head>
- <title>Détermination de la taille de la fenêtre du navigateur</title>
- <meta name=author content="Bernard Chardonneau">
- <meta name=copyleft content="Téléchargement autorisé">
- <script>document.cookie = "largeur=" + window.innerWidth + "; expires=0"</script>
- <script>document.cookie = "hauteur=" + window.innerHeight + "; expires=0"</script>
- <meta http-equiv="refresh" content="0; url=aff_taille.php">
- </head>
- <body>
- </body>
- </html>
|
Fichier aff_taille.php (partiel)
Code :
- <html>
- <head>
- <title>Affichage de la taille de la fenêtre du navigateur</title>
- <meta name=author content="Bernard Chardonneau">
- <meta name=copyleft content="Téléchargement autorisé">
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- </head>
- <body>
- <?php
- // ici on met le même script que dans le fichier PHP précédent (ou un autre)
- ?>
- <br/>
- <a href=det_taille.html>Réactualiser les dimensions</a>
- </body>
- </html>
|
Dans le cas de page web avec frames, les dimensions de la fenêtre peuvent être récupérées dans la page contenant le frameset et utilisées immédiatement dans des morceaux de page générés en PHP.
Le bon fonctionnement des scripts ci dessus a été constaté avec plusieurs versions de Firefox, Opera et Google Chrome (bien que ce dernier ne semble pas aimer les serveurs web sur localhost).
Tel quels, ils ne fonctionnent pas ni avec Internet Explorer ni même avec Micro$oft Edge.
Je présume que c'est volontaire de la part du fabricant de ces produits, car dans le cas contraire, ils avaient plus de 10 ans pour assurer la compatibilité de leur javascript.