删除浏览器历史记录中的最后一项
问题描述:
将表单提交到URL后,浏览器将该页面再次注册到历史记录中。假设,我在页面X中,然后转到页面Y并提交表单。现在,当我按下浏览器的按钮时,它再次加载相同的页面,即。因此,该表单提交使浏览器再次在浏览器历史记录中注册页面Y. 而且,我支持所有的浏览器和设备。 如何删除浏览器历史记录中的最后一项或停止浏览器在历史记录中再次注册页面?删除浏览器历史记录中的最后一项
答
您无法编辑用户历史记录。在这方面,您可以做的最好的办法是更改当前页面的后退按钮指向location.replace(pageX)
的位置,以便按下后退按钮不会重新加载相同的页面,而是转到pageX。但如果用户再次按下,则会出现问题,因为该页面的历史记录将再次为pageY。
您最好的选择是保持表单提交刷新页面首先。这样历史将是正确的。这可以通过发送带有AJAX的表单而不是传统的方法来完成。这里是一个使用jQuery来阻止传统表单提交然后发出AJAX请求的例子。
$(document).ready(function() {
$('#myform').on('submit', function(e) {
e.preventDefault();
$.ajax({
url : $(this).attr('action'),
data: $(this).serialize(),
success: function (data) {
// if you want it to do something when it's done, put it here
},
error: alert("broke"),
type: "GET"
});
});
});
更新
第三个很好的选择是只是做你在您的评论说。如果您在表单提交后使用history.back()
,那么用户返回历史记录将按您的要求工作。按回一次将它们带到pageX。它只会是变得奇怪的转发历史。但是按下前进按钮的可能性非常小。用户只需导航到页面,他们为什么会向前推?然后,只要他们在别的地方导航,怪异的前锋历史就会被覆盖。
难道你不能只是在浏览器完成后才将浏览器发送给Page X,这样人们就不需要按下后退按钮了? –
@tylermackenzie不,用户应该保持在同一页面,因为它具有除表单提交之外的其他功能。但即使我做了一个history.back(),它仍然在历史记录中,如果用户再次单击向前按钮,他必须点击后退按钮两次才能进入第X页,如果他愿意的话。 –