Браузер не запоминает позицию последней просмотренной страницы - PullRequest
5 голосов
/ 01 августа 2009

Я сделал несколько поисков по этой проблеме, и я пришел с пустыми руками. Я надеюсь, что кто-то может прояснить для меня вещи и указать мне правильное направление.

Проблема: У меня есть страница, которая отображает список результатов после отправки формы поиска. Когда пользователь нажимает на один из результатов, браузер переходит на новую страницу, на которой отображается дополнительная информация о результате. Когда пользователь затем нажимает кнопку «Назад», чтобы перейти к результатам, мой браузер перезагружает страницу и отображает верхнюю часть страницы вместо результата, который был последний раз нажат.

Цель: Я хотел бы вот что: когда пользователь нажимает кнопку «Назад», браузер должен вернуться на предыдущую страницу и вместо отображения верхней части страницы отобразить страницу в предыдущая позиция.

Решение: Я совершенно заблудился, как можно достичь этого результата. Может ли это быть как-то связано с javascript или заголовками, отправляемыми в браузеры, может быть что-то связано с кэшированием.

Ответы [ 4 ]

2 голосов
/ 01 августа 2009

Если это невероятно важно, я бы предложил изучить следующее:

  • добавить id s к каждой исходящей ссылке
  • используйте JavaScript для захвата onClick для ссылок
  • при нажатии на ссылку перенаправить пользователя на id идентификатор фрагмента этой ссылки , а затем связать при желании

Когда пользователь нажимает кнопку «Назад», он возвращается к этой конкретной ссылке, например, http://www.example.com/#link27 вместо http://www.example.com/

Вы можете получить некоторые идеи здесь:

1 голос
/ 01 августа 2009

Вы можете использовать javascript и jquery, чтобы установить позицию прокрутки окна, и куки, чтобы сохранить позицию для прокрутки. В JavaScript страницы с результатами поиска вы можете получить что-то вроде этого:

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

Предполагается, что ссылки вашего результата поиска имеют class="resultLink".

0 голосов
/ 01 августа 2009

Я исправил эту проблему, отправив заголовки с php. Это было мое решение:

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

Спасибо всем за помощь.

0 голосов
/ 01 августа 2009

Первая часть ответа заключается в том, что вы используете якоря, чтобы попасть на страницу, отличную от верхней. Так что, если у меня есть это в моем HTML в нижней части моей страницы:

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

тогда я могу заставить пользователя приземлиться там, добавив привязку к концу URL:

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

Итак, если вы говорите о ASP.Net, вы можете поместить якорь в скрытое поле на странице информации о странице, а затем прочитать его со страницы поиска, используя свойство: 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...