6
votes

Le navigateur ne se souvient pas de la position de la page Dernière vue

J'ai fait quelques recherches pour ce problème et j'ai monté les mains vides. J'espère que quelqu'un peut clarifier les choses pour moi et me diriger dans la bonne direction.

problème: J'ai une page qui affiche une liste de résultats après avoir soumis un formulaire de recherche. Lorsqu'un utilisateur clique sur l'un des résultats, le navigateur passe à une nouvelle page indiquant plus d'informations sur le résultat. Lorsque l'utilisateur clique ensuite sur le bouton "BACK" pour aller faire pack vers les résultats, mon navigateur recharge la page et affiche le haut de la page au lieu du résultat dernier cliqué sur la dernière fois.

Objectif: Ce que je voudrais, c'est que cela: Lorsque l'utilisateur cliquez sur le bouton Précédent, le navigateur doit revenir à la page précédente et, au lieu de montrer le haut de la page, affiche la page. à la position précédente.

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


0 commentaires

4 Réponses :


2
votes

Si cela est incroyablement important, je suggère d'enquêter sur les éléments suivants:


3 commentaires

Donc, 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 qui a été cliqué. 3. La fonction appelée à partir de l'événement obtient l'ID du lien. 4. La fonction redirige la page à la page de résultats avec l'ID du lien annexe à la fin de l'adresse 5. Après la recharge de la page Résultats, la fonction redirige la page sur la page avec plus d'informations sur les résultats. C'est ce que tu veux dire? Je peux voir comment ça fonctionne, mais ce serait bien de trouver une manière plus directe sans avoir à recharger la page de résultats une seconde fois


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


@Vinkocm, une recharge complète de la page ne devrait pas être nécessaire. Le déplacement entre les fragments de la même page doit être presque instantané sur la plupart des navigateurs.



0
votes

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

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);
        }
    }
}


1 commentaires

Malheureusement, j'utilise php et je ne sais rien à propos d'ASP.NET



1
votes

Vous pouvez utiliser JavaScript et JQuery pour définir la position de défilement de la fenêtre et des cookies pour stocker la position pour faire défiler. Dans le JavaScript de la page avec les résultats de la recherche, vous pouvez 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());
}


0 commentaires

0
votes

J'ai corrigé ce problème en envoyant des en-têtes avec PHP. C'était ma solution: xxx

grâce à tout le monde pour l'aide.


1 commentaires

Savez-vous pourquoi cela fonctionne? Si un navigateur doit revenir en arrière et toucher le serveur Web pour le contenu, pourquoi est-il plus susceptible de conserver des informations d'état de la page sur le bouton arrière?