浏览器不记得上次查看页面的位置(Browser does not remember position

2019-06-27 10:55发布

我已经做了针对此问题的一些搜索,我想出了空手而归。 我希望有人能澄清事情对我和我指出正确的方向。

问题:我有必要提交搜索表单后显示的结果列表的页面。 当用户点击的结果之一,浏览器去显示有关该结果的更多信息了新的一页。 然后,当用户点击“返回”按钮,进入包的结果,我的浏览器重新加载页面,并显示在页面的顶部,而不是最后被点击的结果。

目标:我想是这样的:当用户点击的后退按钮,浏览器应该返回到前一页和,而不是显示在页面的顶部,在以前的位置显示的页面。

解决方案:我完全失去了,因此这个结果如何能够实现。 难道有事情做与JavaScript,或者发送到浏览器的标题,也许是与缓存。

Answer 1:

如果这是非常重要 ,我建议研究以下内容:

  • 添加id s到每个传出链接
  • 使用JavaScript来捕获onClick的链接
  • 点击一个链接时,将用户重定向到该链接的id 的片段标识符 ,然后链接出如所期望

当用户点击后退按钮,就会返回到具体环节,如http://www.example.com/#link27代替http://www.example.com/

您可以从这里得到一些想法:

  • 堆栈溢出:是否有可能持续下去(无需重新加载)跨BACK按钮点击AJAX页面状态?
  • YUI浏览器历史记录管理器
  • Ajax模式:唯一URL


Answer 2:

您可以使用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"



Answer 3:

答案的第一部分是你使用锚的土地上比顶部以外的某个网页。 所以,如果我有这个,我在我的页面底部的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);
        }
    }
}


Answer 4:

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

感谢大家的帮助。



文章来源: Browser does not remember position of page last viewed