【问题标题】:what will persist when returning via back button?通过后退按钮返回时会持续存在什么?
【发布时间】:2012-10-04 21:24:31
【问题描述】:

我了解当您通过后退按钮返回页面时,复选框将保持选中状态。使用 jquery 的 addClass 添加的类却没有。有人可以帮助我了解通过后退按钮返回时某些事情何时会持续存在吗?另外,有没有办法保存变量的值,以便我可以使用变量值重新创建不持久的对象?

【问题讨论】:

  • +1 表示措辞恰当、意义重大的问题。想详细说明你的场景的细节,还是只是一个“假设”问题?

标签: javascript jquery html css


【解决方案1】:

Nothing 持续存在 - 类不会持续存在,因为 DOM 被重新生成,JS 变量不会持续存在,因为代码被重新执行等等。同时,浏览器实现似乎非常同意为方便起见保留用户输入的表单数据,即使此行为不是任何官方规范的一部分。

如果您需要在客户端保留一些数据 - 您很可能在架构上做错了什么。为什么您要尝试覆盖浏览器“返回”按钮行为以使用户返回任意状态,而不是转到上一个 URL 并重新呈现页面?如果您的应用程序需要大量交互并且需要这种“后退”按钮行为,您可能希望放弃让用户在独立页面之间导航,转而使用 AJAX 请求并依赖于 html5 history api 之类的东西允许您执行任何将页面置于所需状态的任意代码。

您没有详细说明您实际期望存储的内容 - 也许localStorage 或 cookie 替代品会更合适

更新:

我已将a fiddle 放在一起以测试表单数据在遍历历史记录时的持久性以及隐藏字段 可供 JS 处理 - 尽管 imo 仍然不是一个好主意

【讨论】:

  • 你是说我可以使用隐藏的表单数据,因为它会持续存在?
  • @user584583:我是说依赖输入字段在浏览器之间可能会非常不一致并且不可靠
  • nothing 持续存在有点误导。您已经指出了一些确实存在的东西:用户输入的表单数据。另外两个持续存在的东西是滚动位置,对于移动设备,缩放级别。
【解决方案2】:

现代浏览器越来越尝试持久化。 Firefox 几年前曾尝试保留包括类名更改在内的所有内容,只要服务器指示该页面可在 HTTP 标头中缓存并且该网页尚未注册任何 onunload 事件处理程序。当用户按下返回时,Firefox 会触发 onpageshowonpagehide

https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

【讨论】:

    【解决方案3】:

    这在很大程度上取决于您是否处理 url 的哈希,即如果您这样做,您可以持久保存所有内容。

    已编辑:

    您必须熟悉单页应用程序 (SPA) 的概念。

    这一切都归功于能够更改 location hash property 和管理浏览器历史记录。

    为了简单起见,有大量的库,例如 Sammy.js

    每次您让用户执行操作时,您都会推送新状态,因此您将能够处理按下后退按钮。

    要了解它的外观,请查看jsfiddle

    在你看到的设置routes的代码中:

    Sammy(function() {
        this.get('#:folder', function() { ... });
        this.get('#:folder/:mailId', function() { ... });
    })).run();
    

    其中指定哈希,即www.mygreatwebsite.com/#inbox/#1 以及您的应用将如何处理它。

    这里还有更多内容,所以我的链接只是您探索的起点。

    已编辑:much simplier example of using sammy.js

    【讨论】:

    • 您能澄清一下您写的内容吗?哈希?
    【解决方案4】:

    补充以上答案,可以用viewstate保存表单状态。

    ViewState 允许 ASP.NET 在每次回发到服务器时重新填充表单字段,确保在用户点击提交按钮时不会自动清除表单。

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多