Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Browser does not remember position of page last viewed

I have done a few searches for this issue and I have come up empty handed. I hope somebody can clarify things for me and point me in the right direction.

Problem: I have a page that displays a list of results after submitting a search form. When a user clicks on one of the results, the browser goes to a new page showing more information about the result. When the user then clicks the 'back' button to go pack to the results, my browser reloads the page and shows the top of the page instead of the result that was last clicked.

Goal: What I would like is this: when the user click's the back button, the browser should go back to the previous page and, instead of showing the top of the page, show the page at the previous position.

Solution: I am completely lost as how this result can be achieved. Could it have something to do with javascript, or headers sent to the browsers, maybe something to do with caching.

like image 878
VinkoCM Avatar asked Aug 01 '09 00:08

VinkoCM


People also ask

How can I retain the scroll position of a scrollable area when pressing back button?

During page unload, get the scroll position and store it in local storage. Then during page load, check local storage and set that scroll position.

How do I go back to previous page in Javascript?

The history. back() method loads the previous URL (page) in the history list. The history. back() method only works if a previous page exists.


2 Answers

If this is incredibly important, I'd suggest investigating the following:

  • add ids to each outgoing link
  • use JavaScript to capture the onClick for the links
  • when a link is clicked, redirect the user to that link's id fragment identifier, then link out as desired

When the user hits the back button, they'll return to that specific link, e.g. http://www.example.com/#link27 instead of http://www.example.com/

You may be able to get some ideas from here:

like image 166
Anirvan Avatar answered Oct 16 '22 21:10

Anirvan


You can use javascript and jquery to set the scroll position of the window and cookies to store the position to scroll to. In the javascript of the page with the search results you could have something like this:

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

This assumes your search result links have class="resultLink".

like image 25
ironsam Avatar answered Oct 16 '22 21:10

ironsam