【问题标题】:Use Javascript history.go() to the real "previous" page使用 Javascript history.go() 到真正的“上一个”页面
【发布时间】:2013-05-15 10:45:20
【问题描述】:

假设我们有这样的历史:

 - Home
 - Page 1
 - Page 2

JS history.go(-1) 可以很好地转到第 1 页...但是如果我们当前的历史是

 - Home
 - Page 1
 - Page 2
 - Page 2 (2nd time)
 - Page 2 (3rd time)
 - ...
 - Page 2 (nth time)

我们如何使用JavaScript历史对象返回到第1页

【问题讨论】:

  • 使用一些jQuery历史plugin比如overset.com/2008/06/18/jquery-history-plugin
  • 是什么原因导致同一页面连续多次保存在历史记录中?网址中的哈希?
  • 这是一个 JavaScript 限制,您无法阅读真实的历史记录。所以基本上你无法确定上一页是否与当前相同。您只能使用整数返回,或者如@Juhana 所说,使用带有哈希的技巧。
  • 用户可以“保存和新建”...这会导致一些数据的POST和同一页面的GET。不知道为什么 [some?] 浏览器会再次将页面保存在历史记录中。

标签: javascript html browser-history


【解决方案1】:

您可以创建一个对对象的属性执行 +1 的函数,然后您可以使用该值返回正确数量的步骤

var History = {

    steps : 0

}

somenewpagelink.onclick = function() {

    History.steps = (parseInt(History.steps)+1);

}

然后如果你想回到第1页,只需创建另一个函数:

function goBack() {

    History.go(-History.steps);
    History.steps = 0;

}

当您返回时,这些步骤将被重置,因此当您在您的网站中进一步浏览时,它不会返回许多步骤。

我确实认为使用 jQuery 是一个很好的解决方案,但不适用于可以使用原始 Javascript 轻松解决的小问题,如果将 jQuery 用于 1 个功能,它只会减慢您的网站速度。

此外,您可以在其中添加一个开关,如果当您单击返回以实际从第 3 页返回到第 1 页时,您也可以将其反转。

function goBack(r) {

    if (r)
        history.go(History.steps);
    else 
        history.go(-History.steps);
        History.steps = 0;

}

当然,此功能需要进行必要的调整才能达到所需的效果并且完全完美,但对于简单的实现,您可以使用它。

【讨论】:

    【解决方案2】:

    此方法的签名是来自(w3school)history.go(number|URL)。所以你可以使用字符串参数而不是数字,如果(以某种方式)你知道哪个是 page2 的 url,你就可以使用它。

    history.go("http://localhost/page2");
    

    【讨论】:

    • 嗯.. 我将尝试使用 url 助手(我在 Asp.net MVC 上)根据页面上的参数构建该 URL。将发布结果。
    • 或者你可以像this一样做
    【解决方案3】:

    当页面被加载时,现在将 history.length 记录在一个 js 对象中。 当你想回到第1页时,history.go(record-history.length-1)。 我测试它运行良好。但我不知道是否会有不安全的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      相关资源
      最近更新 更多