【问题标题】:How to implement a "History" Back-Button如何实现“历史”后退按钮
【发布时间】:2020-05-12 07:53:35
【问题描述】:

我有一个显示客户详细信息的网站 (www.mysite.com/client.php?id=1234)。 此页面可以从网站内的不同位置加载。

我想要一个“返回按钮”到上一页。

我的第一个解决方案是使用<a href="javascript:window.history.back();">back</a>。这通常工作正常。

当然,可以编辑客户的详细信息(通过引导模式)。一旦按下“保存”,数据就会被存储并再次加载客户端的详细信息 (www.mysite.com/client.php?id=1234) 以显示正确的(更新的)数据。现在上述解决方案不再正常工作了,因为“返回按钮”需要按两次才能到达“入口”站点。

问题:

1) JavaScript 解决方案是正确的,还是我必须实现一个服务器端数组来跟踪历史日志(听起来很沉重)?

2) 更新后重新加载网站有什么问题吗?或者在这种情况下我可以阻止客户端历史日志吗?

3) 还有其他想法吗?

感谢您的支持!

提姆

【问题讨论】:

标签: javascript php browser-history html5-history referer


【解决方案1】:

后退按钮通常会将用户带回到上一个 URL。浏览器可能会缓存页面内容并显示过时的数据。您可以告诉浏览器不要缓存特定页面。

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

此外,如果一个用户正在修改数据而另一个用户只是查看数据,则任何用户特定的解决方案都会失败。每次加载页面时,您都必须强制从服务器获取数据。因此,无缓存标头

更新:

要将用户带回您想要的位置,您可以使用另一个参数指定“返回”目标 URL。例如。

 www.mysite.com/client.php?id=1234&backdestination=list.php%3Fshow%3D123 
 //list.php?show=123

然后,在页面上创建一个按钮/链接并使用来自backdestination的值

更新 2:

您可以检查window.History API,特别是replaceState 方法。从技术上讲,它允许您指定“后退”的位置。 但是,您仍然需要在请求中携带backdestination URL。通过 GET 参数、会话变量或本地存储。

也许您可以通过始终存储最后 X 个 URL 的历史来概括实现。然后,如果您需要修改返回的目的地,请使用某种算法来确定用户来自哪里。例如。将用户带到脚本文件名不是当前文件名的最后一个 URL:

请求历史:

 /list.php
 /list.php?page=2
 /client.php?id=123     // User viewing the client
 /client.php?id=123     // Page reload after POST

现在,如果用户单击返回,则会加载相同的 client.php。但是,您可以创建一个通用脚本,用replaceState() 修改历史对象。

我希望这能给你一些想法。

【讨论】:

  • 感谢您的提议和建议,但我已经实现了这些标头。我不确定,如果你的回答适合我的问题。我没有过时数据的问题,因为浏览器已获取数据。需要重新加载数据并且工作正常。我的问题是“双击”后退按钮以进入入口点。还有其他想法吗?
  • 感谢您的更新。这接近我已经尝试过的方法,但停止了这种方法,因为我希望找到一种更简单的方法。问题是我必须在编辑/更新过程中将backdestination 作为变量发布在 html 表单中,通过控制器携带它并在重新加载页面时对其进行处理。这适用于每种形式(不仅有client.php)。
  • 感谢更新2。是的,我可以尝试在$_SESSION 中构建一个堆栈数组。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 2011-12-31
  • 2015-10-11
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
相关资源
最近更新 更多