【问题标题】:An intelligent Javascript back button that doesnt use history()一个不使用 history() 的智能 Javascript 后退按钮
【发布时间】:2010-12-14 17:33:54
【问题描述】:

我在一个平台上开发,该平台对如何实现正确的后退按钮有一些限制。

所以我需要创建一个按钮,而不仅仅是 "javascript:history.back()"

让我解释一下:

page1...点击进入...
page2...填写字段并提交给自己...
page2?something=else...这里是需要返回按钮的地方

在 page2?something=else 我希望后退按钮将用户带回 page1

page1 = 可以是任何页面(所以不能直接链接)

是否有一个函数可以在提交页面时知道 URL 的变化并记住 URL?

如果您想了解更多信息,请告诉我。

谢谢

【问题讨论】:

  • 是什么阻止了他们在浏览器中点击后退按钮?
  • @zzzzBov 完全同意,希望我的项目经理也这么认为
  • 明白了。我假设您正在为page2?something=else 部分发送表单数据。如果您将数据发布到脚本,您应该发送一个 unique_id 进行检查,以防止意外重复提交。
  • 这可能有点过头了,但是,如果浏览器处于受控环境中,那么您甚至可能需要考虑创建一个扩展程序(例如,用于 firefox)。

标签: javascript


【解决方案1】:

实现此目的的一种方法是在 page2 上提交表单。它通常会向自己提交表单,您的脚本将拦截提交操作并替换历史记录中的当前项目。为此,您需要重构查询字符串值:

myForm.onsubmit = function () {
    var url = this.action,   // The URL where the form is submitted
        els = this.elements, // A list of all the input elements
        qs  = "?",           // The query string we're constructing
        enc = function (s) { // Function for encoding
            return encodeURIComponent(s).replace(/%20/g, "+");
        };

    for (var i=0, max = els.length; i < max; i++) {
        if (els[i].disabled || !els[i].name)
            continue;

        qs += enc(els[i].name) + "=" + enc(els[i].value) + "&"; 
    }

    // chop off the final ampersand
    qs = qs.slice(0, -1);

    // Replace the current entry in the history
    window.location.replace(action + qs);

    // Cancel the default form submission
    return false;
}

它可能需要稍微改进以满足您的需求,但您大致了解。现在浏览器的后退按钮和您自己的后退按钮都应该返回到page1。但是,这种方法不适用于 POST 提交。

【讨论】:

    【解决方案2】:

    有几种不同的方法可以解决这个问题。

    其中第一个取决于Page1 和page2?something=else 之间的历史记录页数始终相同的假设。

    javascript: window.history.go(-2)
    

    注意 -2 这告诉浏览器要返回多少页。

    第二种更费力但最终更可靠的选择是将当前用户的面包屑(即他们已经过境的页面)存储在会话中,然后使用会话数据构建您的反向链接.

    第三种选择是将反向链接应指向的页面/地址作为发布/获取参数传递到所有页面。当用户点击显示反向链接的页面时,您可以使用该数据构建反向链接。

    第四个选项是将第一个与第二个或第三个解决方案结合起来。即在 session/get/post 上传递历史计数,然后使用它来填充进入 Javascript .go(x) 函数的数字

    【讨论】:

    • 你让它听起来很简单。但是这些选项在我的情况下不合适,但是,我认为您已经将 1 与 3 结合起来让我处于正确的位置......将在此处发布我的解决方案
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2014-07-07
    • 2014-02-22
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多