我需要一种方法来禁用浏览器后退按钮或显示弹出窗口,以便在用户处于重力表单的第二页或已经有可用的 POST 数据时返回。
假设表单在 https://www.example.com/form/上,它有 3 个步骤。 在步骤 1 中,如果用户提交数据,它将保留在/form/页面上,但它显示的内容来自表单的步骤 2。 在此阶段,我想禁用后退按钮或询问用户是否要返回,但它会删除步骤1的提交数据。
我尝试过使用popstate,当我们没有任何POST数据时,它确实在第一次访问/或表单的第一步时禁用后退按钮(当用户从 example.com/page/访问到 exmaple.com/form/并尝试返回时,它不能)
window.addEventListener('popstate', function (event) {
alert(event.state);
history.pushState(null, null, document.URL);
});
使用此代码时,alert 显示空,但如果是正常访问(没有 POST 数据),它确实会停止返回,但如果提交表单数据,我需要一种方法来停止返回
我还尝试使用以下代码:
window.addEventListener('DOMContentLoaded', function(eventX){
console.log("DOMContentLoaded done!");
setTimeout(function(){
console.log("beforeunload registered");
window.onbeforeunload = function(){return backDisable()};
window.addEventListener("beforeunload", function(){return backDisable();});
},1000);
});
function backDisable()
{
return "show some warning here!";
}
我已经设置了延迟以让其他东西加载。如果用户尝试访问网站上的另一个页面,此脚本工作正常,如果用户想离开页面,它会显示弹出窗口,但如果用户在步骤 1 或步骤 2 上提交表单,它也会显示弹出窗口(我可以整理出来)但浏览器上的后退按钮仍然有效。
尝试使用 window.history.forward() 方法或 onbeforeunload 并返回 javascript 中的用户警报以获取更多详细信息,请查看此问题(如何使用 JavaScript 停止浏览器后退按钮)