6

我已经为这个问题做了一些搜索,但我空手而归。我希望有人可以为我澄清事情并为我指明正确的方向。

问题:我有一个页面在提交搜索表单后显示结果列表。当用户单击其中一个结果时,浏览器会转到一个新页面,显示有关结果的更多信息。当用户然后单击“返回”按钮以打包到结果时,我的浏览器会重新加载页面并显示页面顶部,而不是最后单击的结果。

目标:我想要的是:当用户单击后退按钮时,浏览器应该返回上一页,而不是显示页面顶部,而是在前一位置显示页面。

解决方案:我完全迷失了如何实现这个结果。它是否与 javascript 或发送到浏览器的标头有关,可能与缓存有关。

4

4 回答 4

2

如果这非常重要,我建议调查以下内容:

  • ids 添加到每个传出链接
  • 使用 JavaScript 捕获onClick链接
  • 单击链接时,将用户重定向到该链接的id 片段标识符,然后根据需要链接出去

当用户点击后退按钮时,他们将返回到该特定链接,例如,http://www.example.com/#link27而不是http://www.example.com/

你也许可以从这里得到一些想法:

于 2009-08-01T01:24:47.803 回答
1

您可以使用 javascript 和 jquery 来设置窗口的滚动位置,并使用 cookie 来存储要滚动到的位置。在带有搜索结果的页面的 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".

于 2009-08-01T01:31:14.927 回答
0

答案的第一部分是您使用锚点登陆页面顶部以外的某个位置。因此,如果我在页面底部的 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);
        }
    }
}
于 2009-08-01T01:25:16.697 回答
0

我通过使用 php.ini 发送标头解决了这个问题。这是我的解决方案:

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

感谢大家的帮助。

于 2009-08-01T15:22:54.050 回答