2009-08-01 7 views
5

J'ai fait quelques recherches pour ce problème et je suis venu les mains vides. J'espère que quelqu'un pourra clarifier les choses pour moi et me diriger dans la bonne direction.Le navigateur ne se souvient pas de la position de la page vue pour la dernière fois

Problème: J'ai une page qui affiche une liste de résultats après la soumission d'un formulaire de recherche. Lorsqu'un utilisateur clique sur l'un des résultats, le navigateur affiche une nouvelle page affichant plus d'informations sur le résultat. Lorsque l'utilisateur clique ensuite sur le bouton «Précédent» pour aller chercher les résultats, mon navigateur recharge la page et affiche le haut de la page au lieu du dernier clic. Ce que je voudrais savoir: lorsque l'utilisateur clique sur le bouton Précédent, le navigateur devrait revenir à la page précédente et, au lieu d'afficher le haut de la page, afficher la page à la position précédente. .

Solution: Je suis complètement perdu de voir comment ce résultat peut être atteint. Pourrait-il avoir quelque chose à voir avec javascript, ou des en-têtes envoyés aux navigateurs, peut-être quelque chose à faire avec la mise en cache.

Répondre

0

J'ai résolu ce problème en envoyant des en-têtes avec php. C'était ma solution:

header("Expires: 0"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: store, cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", FALSE); 

Merci à tout le monde pour l'aide.

+1

Savez-vous pourquoi cela fonctionne? Si un navigateur doit revenir en arrière et rechercher le contenu sur le serveur Web, pourquoi est-il plus susceptible de conserver les informations sur l'état de la page sur le bouton de retour? – Anirvan

2

Si cela est incroyablement importante, je proposerais enquêtait sur les éléments suivants:

  • ajouter id s à chaque lien sortant
  • JavaScript utiliser pour capturer le onClick pour les liens
  • lorsqu'un le lien est cliqué, rediriger l'utilisateur vers ce lien idfragment identifier, puis lier comme souhaité

Lorsque l'utilisateur appuie sur le bouton de retour, il revient à ce lien spécifique, par ex. http://www.example.com/#link27 au lieu de http://www.example.com/

Vous pourrez peut-être obtenir quelques idées d'ici:

+0

Le pseudo-code ressemblerait à ceci: 1. L'utilisateur clique sur un lien dans la liste des résultats. 2. Un événement onClick est appelé à partir du lien sur lequel vous avez cliqué. 3. La fonction appelée depuis l'événement obtient l'identifiant du lien. 4. La fonction redirige la page vers la page de résultats avec l'ID du lien ajouté à la fin de l'adresse 5. Après le rechargement de la page de résultats, la fonction redirige la page vers la page avec plus d'informations sur les résultats. Est-ce que c'est ce que vous voulez dire? Je peux voir comment cela fonctionne, mais ce serait bien de trouver un moyen plus direct sans avoir à recharger la page de résultats une seconde fois. – VinkoCM

+0

Oui, exactement. Et oui, c'est compliqué. – Anirvan

+0

@VinkoCM, un rechargement de page complète ne devrait pas être nécessaire. Se déplacer entre les fragments d'une même page devrait être presque instantané sur la plupart des navigateurs. – Anirvan

0

La première partie de la réponse est que vous utilisez ancres pour atterrir sur une page quelque part autre que le haut. Donc, si j'ai dans mon HTML au bas de ma page:

<a name="f"></a> 

alors je peux avoir la terre d'utilisateur, il en annexant l'ancre à la fin de celui url:

http://www.bullionvalues.com/glossary.aspx#f 

Ainsi, Si vous parlez de ASP.Net, vous pouvez placer l'ancre dans un champ caché sur la page d'informations de la page et ensuite le lire depuis la page de recherche en utilisant: Page.PreviousPage.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.PreviousPage != null) 
    { 
     Object o = PreviousPage.FindControl("hfAnchor"); 
     if (o != null) 
     { 
      HiddenField hf = o as HiddenField; 
      Response.Redirect(Request.Url+"#"+hf.Value); 
     } 
    } 
} 
+0

Malheureusement, j'utilise PHP et je ne sais rien sur ASP.NET – VinkoCM

1

Vous pouvez utiliser javascript et jquery pour régler la position de défilement de la fenêtre et les cookies pour stocker la position pour faire défiler.Dans le javascript de la page des résultats de recherche que vous pourriez avoir quelque chose comme ceci:

var COOKIE_NAME = "scrollPosition"; 
$(document).ready(function() { 

    // Check to see if the user already has the cookie set to scroll 
    var scrollPosition = getCookie(COOKIE_NAME); 
    if (scrollPosition.length > 0) { 
     // Scroll to the position of the last link clicked 
     window.scrollTo(0, parseInt(scrollPosition, 10)); 
    } 

    // Attach an overriding click event for each link that has a class named "resultLink" so the 
    // saveScrollPosition function can be called before the user is redirected. 
    $("a.resultLink").each(function() { 
     $(this).click(function() { 
      saveScrollPosition($(this)); 
     }); 
    }); 

}); 

// Get the offset (height from top of page) of the link element 
// and save it in a cookie. 
function saveScrollPosition(link) { 
    var linkTop = link.offset().top; 
    setCookie(COOKIE_NAME, linkTop, 1); 
} 

// Boring cookie helper function 
function getCookie(name) { 
    if (document.cookie.length > 0) { 
     c_start = document.cookie.indexOf(name + "="); 
     if (c_start != -1) { 
      c_start = c_start + name.length + 1; 
      c_end = document.cookie.indexOf(";", c_start); 
      if (c_end ==- 1) c_end = document.cookie.length; 
      return unescape(document.cookie.substring(c_start, c_end)); 
     } 
    } 
    return ""; 
} 
// Another boring cookie helper function 
function setCookie(name, value, expiredays) { 
    var exdate = new Date(); 
    exdate.setDate(exdate.getDate() + expiredays); 
    document.cookie = name + "=" + escape(value) + 
     ((expiredays==null) ? "" : ";expires=" + exdate.toGMTString()); 
} 

Cela suppose vos liens de résultats de recherche ont class="resultLink".

Questions connexes