如何实现 "History" 后退按钮

How to implement a "History" Back-Button

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

我想要"Back-Button"到上一页。

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

当然,可以编辑客户的详细信息(通过 bootstrap 模式)。推送 "save" 后,将存储数据并再次加载客户端的详细信息 (www.mysite.com/client.php?id=1234) 以显示正确的(更新的)数据。现在上面的解决方案不再有效,因为 "Back-Button" 需要被推送两次才能到达 "entry"-site.

问题:

1) JavaScript-解决方案是否正确,或者我是否必须实施服务器端数组来跟踪历史日志(听起来很沉重)?

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

3) 还有其他想法吗?

感谢您的支持!

蒂姆

后退按钮通常会将用户带回到上一个 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" />

此外,如果一个用户正在修改数据而另一个用户只是在查看数据,任何 user-specific 解决方案都将失败。每次加载页面时,您都必须强制从服务器获取数据。因此,no-cache headers

更新:

要将用户带回您想要的位置,您可以使用另一个参数指定 "back" 目的地 URL。例如。

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

然后,在页面上创建一个 button/link 并使用 backdestination

中的值

更新 2:

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

也许您可以通过始终存储最近 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() 修改历史记录 object。

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