Bonjour,

je me demandais comment le navigateur est capable de mémoriser la position dans la page. Je m'explique:

allez sur la rubrique FAQ de ce site. Descendez vers le milieu de la page. Cliquez sur une rubrique: vous êtes envoyé sur une nouvelle page.
Avec la flèche retour du navigateur, revenez sur la page précédente: vous êtes repositionné exactement au même endroit que vous étiez avant de quitter la page.

Ce comportement est très courant sur la plupart des sites que j'ai pu testés (je dirais même qu'il est majoritaire) mais en même temps il n'est pas systématique: de nombreux site ne se comportent pas ainsi, lorsque l'on revient sur la page que l'on a quittée on n'est repositionné en haut de la page.

J'ai essayé de trouver des réponses à ce sujet mais je n'ai rien trouvé de très clair: certains parlent de javascript, session, cookies, cache.
Je ne suis pas convaincu car j'ai testé en désactivant les cookies et le javascript et avant de faire retour arrière j'effaçais mes traces (cache, cookies, session): je retombais toujours à la position où j'étais.

si quelqu'un peut m'éclairait sur ce point ... Smiley confus
Modifié par Benjah (09 Sep 2008 - 12:30)
Normalement, les navigateurs reviennent à la position précédente par rapport à la page (mais ce n'est pas une rêgle absolue), donc en désactivant javascript il n'y a pas de raison pour que ça ne le fasse pas.
Par contre, certains scripts présents sur une page peuvent soit faire en sorte de remonter en haut de la page au chargement de celle-ci ou carrément recharger la page, ce qui la remettra en haut (comportement volontaire), ou alors débousoller le navigateur qui ne pourra plus (ou ne voudra plus) se "souvenir" de l'endroit de la page.
Ce n'est pas stocké dans les coockies, normalement pas en cache non plus, peut-être dans des variables spécifiques au navigateur, stockées dans la mémoire RAM. Donc indépendant du site que tu visites ou que tu créé Smiley cligne
(Mais il est possible grâce au javascript où/et à des ancres de revenir à un point précis de la page, il me semble Smiley smile )
Modifié par superjun (09 Sep 2008 - 12:55)
C'est géré en interne par le navigateur (lorsqu'il gère cet aspect, pas sûr que ça soit le cas de tous les navigateurs). Si le navigateur ne le fait pas pour certaines pages... eh bien ça va dépendre de l'implémentation de cette fonction par le navigateur, des bugs éventuels, et de plein d'autres choses dont un webmaster n'a pas particulièrement à se soucier.
Merci pour les réponses précédentes.

Je me permets de rajouter ceci:

Bon le résultat va peut-être paraitre évident pour certains, mais voici un petit test que j'ai fait:

j'ai écrit un petit code html (tab1.htm) qui écrit toto et titi l'un en-dessous de l'autre et suffisamment espacés pour faire apparaitre l'ascenseur sur mon écran:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>tableau</title>


<style type="text/css">
.cellule {
	width:200px;
	height:400px;
}
</style>


</head>
<body>
      <div class="cellule">toto</div>
      <div class="cellule">titi</div>
</body>
</html> 


puis j'ai écris le code équivalent en php (tab1.php):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>tableau</title>


<style type="text/css">
.cellule {
	width:200px;
	height:400px;
}
</style>


</head>
<body>
<?
   echo "<div class=\"cellule\">toto</div>";
   echo "<div class=\"cellule\">tutu</div>";
?>
</body>
</html> 


Je mets tout ça en ligne. La position est mémorisée avec tab1.htm mais pas avec tab1.php.

Donc ma question:
Le navigateur ne reçoit que du html. Il ne sais pas si le code était à l'origine en php ou pas. Quand j'affiche via le navigateur la source du fichier généré à partir du fichier tab1.php je vois exactement la même chose que si j'édite le fichier tab1.htm. Alors comment expliquer la différence de comportement ?
Modifié par Benjah (09 Sep 2008 - 14:00)
Peut-être que le navigateur ne traite pas de la même manière les fichiers avec extension .htm ou .php
Auquel cas ça pourrait être soumis dans un rapport de bug Smiley cligne
Administrateur
Bonjour,

les forums du type vanilla ont cette horripilante manie de ne jamais conserver la position dans la page quand on y revient en cliquant sur 'Précédent' ...

Mmh je pensais par élimination (aucune certitude, jamais testé, etc) que c'était établi lors de la négociation de contenu (HTTP) qui a lieu entre le serveur et le navigateur. Il y a un paramètre qui indique une durée de vie (ou bien c'est complètement autre chose? Smiley lol ).
Ou alors les sessions PHP?
Tout d'abord mille excuses Smiley confused :
ERRATUM: Oubliez le test décrit plus haut avec l'histoire du tab1.php et tab1.htm: il n'y a aucune différence de comportement. Dans les 2 cas on est repositionné à la position où l'on était avant d'avoir changé de page. Je ne sais pas ce qui a cloché dans ma manip.

Par contre il est clair que cette histoire de repositionnement dépend du navigateur.
J'ai testé avec un site que je suis en train de faire: je suis sur la page acceuil. Je clique sur un lien pour aller sur une page qui contient beaucoup de texte. Je positionne l'ascenseur au milieu de la page. Je fais "page précédente" avec mon navigateur puis "page suivante". Avec Firefox je me retrouve avec l'ascenseur en haut de la page. Avec IE, opéra, chrome, la position de l'ascenseur est restée inchangée. Et je peux vous dire que je n'ai rien écrit de particulier dans le code pour que la position soit mémorisée.

Par contre, si je fais le même type de test avec votre site, FireFox se comporte de la même façon que les autres navigateurs que j'ai pu testés (l'ascenseur reste à sa position).
Pourquoi Firefox se comporte différement d'un site à l'autre: Mystère !

Pour répondre à Felipe:
a écrit :
les forums du type vanilla ont cette horripilante manie de ne jamais conserver la position dans la page quand on y revient en cliquant sur 'Précédent' ...

je ne sais pas si tu parles de la rubrique "Community", mais je peux te dire que, si c'est bien de cela qu'il s'agit, avec IE no problem. Avec FireFox effectivement pas de mémorisation.

Pour répondre à Florent:
a écrit :
[...] un webmaster n'a pas particulièrement à se soucier
Je ne trouve pas que se problème soit complètement à négliger: encore une fois, comme le dit Felipe:
a écrit :
Les forums du type vanilla ont cette horripilante manie de ne jamais conserver la position dans la page
Ce n'est pas très ergonomique d'avoir à toujours se repositionner sur l'endroit que l'on vient de quitter.

Modifié par Benjah (09 Sep 2008 - 20:31)
Salut,

après un petit test le code suivant permet effectivement de perdre le positionnement dans Firefox :
<?php
header("Cache-Control: no-store"); 
?>

A+
Modérateur
Bonjour,

Sans en être certain, je crois que cela est contrôlé par les entêtes HTTP envoyés par le serveur. Sur Vanilla, ils semblent avoir configuré le serveur pour que les pages ne se mettent jamais en cache :

Une page de Vanilla retourne ceci :
a écrit :

(Status-Line) HTTP/1.1 200 OK
Date Tue, 09 Sep 2008 20:12:37 GMT
Server Apache/2.0.52 (Red Hat)
X-Powered-By Lussumo Vanilla 1.1.4
Expires Thu, 19 Nov 1981 08:52:00 GMT
Last-Modified Tue, 09 Sep 2008 20:12:37 GMT
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
Connection close
Transfer-Encoding chunked
Content-Type text/html; charset=utf-8


Voyez les dates d'expiration, le contrôle du cache, etc. En faisant Page Précédente, j'ai perd le focus que j'avais.

Avec Alsacreations, il n'y a aucun contrôle du cache. Lorsqu'on fait Page Précédente, il n'y a aucune requête qui se fait sur le serveur. J'ai testé avec HTTPFox.

Par contre, là où je suis un peu confu, c'est lorsque je vide ma cache avant de faire Page Précédente sur Alsa. Mon navigateur fait bien une nouvelle requête GET vers le serveur, mais le focus est tout de même conservé.

Une chose est certaine, je crois que cela à avoir avec les entêtes Cache-Control, Expires et Pragma.

Il faudrait tester sur d'autres sites. L'idéal étant de trouver un article à ce sujet.

Puis pour les fois où le focus est occassionnel, si aucun contrôle de cache n'est configuré sur le serveur, le navigateur analyse et décide ce qui doit aller en cache ou non, à son bon vouloir. Même que les entêtes HTTP ne sont là que pour le guider, et rien ne l'oblige à respecter les entêtes. Je vais d'ailleurs tenter de retrouver l'article au sujet des caches.
Modifié par Tony Monast (09 Sep 2008 - 22:30)