javascript - 删除浏览器历史记录中的最后一项

标签 javascript browser form-submit browser-history

当表单被提交到一个 URL 时,浏览器会在历史记录中再次注册该页面。假设,我在第 X 页,然后转到第 Y 页并提交表单。现在,当我按下浏览器的后退按钮时,它会再次加载相同的页面,即。页 Y 而不是转到页 X。 因此,此表单提交使浏览器再次在浏览器历史记录中注册页面 Y。 而且,我支持所有的浏览器和设备。 如何删除浏览器历史记录中的最后一个条目或阻止浏览器在历史记录中再次注册该页面?

最佳答案

您不能编辑用户历史记录。在这方面,您可以做的最好的事情是使用 location.replace(pageX) 更改当前页面的后退按钮指向的位置,以便按下后退按钮不会重新加载同一页面,而是转到第X页。但是如果用户再次按下返回,就会出现问题,因为该页面的历史记录将再次成为 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(),则用户Back 历史记录将完全按照您的要求工作。按一次返回将他们带到 pageX。只有 Forward 历史才会变得奇怪。但是按下前进按钮的可能性极小。用户刚刚导航到页面,他们为什么要向前推进?然后,一旦他们导航到其他地方,那个奇怪的前向历史就会被覆盖。

关于javascript - 删除浏览器历史记录中的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40668985/

相关文章:

javascript - 打开 Excel 和 TextEdit 时 UTF8 CSV 文件的编码问题

javascript - Threejs简化几何没有颜色

javascript - 使用 RxJS 模拟 'then' Promise 行为

javascript - 如何检测浏览器未最小化且相关选项卡未处于非事件状态

javascript - 如何更改 Firefox 插件上的脚本位置?

javascript - 使用 Ajax 提交联系表单而无需重新加载页面

javascript - 文件(任何类型)的动态幻灯片

android - 无需打开浏览器窗口即可调用 URL

javascript - 我正在尝试从几个表单中提交一个表单,但提交的值只属于第一个

java - 表单提交的异常长的后端处理对浏览器的影响是什么以及如何处理?