Javascript 如何获得;“确认表格重新提交”;当用户尝试刷新浏览器时

Javascript 如何获得;“确认表格重新提交”;当用户尝试刷新浏览器时,javascript,jquery,spring-mvc,Javascript,Jquery,Spring Mvc,我有一个页面不允许用户通过单击浏览器刷新按钮或按F5刷新页面。所以我想模拟“表单重新提交”,以显示提示消息 有人能给我一个实现它的方法吗 是否有跨浏览器解决方案可供使用?要刷新而不获得提示,必须使用HTTPGET 使表单具有method=“GET”而不是method=“POST”(并适当地修复服务器进程以处理此更改) 或者,在会话中缓存post数据,并在表单提交后立即使用HTTP code303重定向到显示页面 如果要引起提示,请将用户指向页面的链接设置为POST表单上的“提交”按钮。如果用户带

我有一个页面不允许用户通过单击浏览器刷新按钮或按F5刷新页面。所以我想模拟“表单重新提交”,以显示提示消息

有人能给我一个实现它的方法吗


是否有跨浏览器解决方案可供使用?

要刷新而不获得提示,必须使用HTTP
GET

使表单具有
method=“GET”
而不是
method=“POST”
(并适当地修复服务器进程以处理此更改)

或者,在会话中缓存post数据,并在表单提交后立即使用HTTP code
303
重定向到显示页面


如果要引起提示,请将用户指向页面的链接设置为POST表单上的“提交”按钮。如果用户带着GET请求到达,并向他们提供一个页面,该页面包含javascript,该javascript提交一个将请求转换为POST请求的表单

您想要的是在卸载前侦听
事件并弹出确认框

编辑:因为您在另一个答案的评论中已经说明(在卸载之前不支持
。您可以尝试以下库

据我所知,它支持移动Safari,尽管我自己没有使用过

请注意,有些浏览器会忽略您在
确认
调用中提供的文本,而是显示其默认文本。有更深入的方法可以解决这个问题,但这会提示对话框

$(window).on("beforeunload", function() { 

      return confirm("Do you really want to close?"); 
});

你是怎么禁用所有东西的

对于浏览器按钮:

对于击键:

window.addEventListener("keyup", checkForRefresh, false);

var checkForRefresh = function(event) {
   if (event.keyCode == 116) {
        alert("Data will be lost if you refresh the page. Are you sure?");
   }
};

IE8的按键可能需要polyfill,但他们在其他讨论中提供了它。

在这里,人们通常采用两种方法:

方法1:使用AJAX+重定向 通过这种方式,您可以使用JQuery或类似于Page2的东西在后台发布表单,而用户仍然可以看到显示的page1。发布成功后,您可以将浏览器重定向到Page2

方法2:Post+重定向到self

这是论坛上的一种常见技术。Page1上的表单将数据发布到Page2,Page2处理数据并执行需要执行的操作,然后对其自身执行HTTP重定向。这样,浏览器记住的最后一个“操作”是在Page2上的一个简单GET,因此表单不会在F5上重新提交


您可以参考以下答案:

是您编写了web应用程序,还是其他人编写了应用程序并且您正在使用它?
$(窗口)。在('beforeunload',function(){return'是否确实要离开?';})
刷新前执行功能我正在开发web应用程序。我在卸载前尝试过,但在Safari手机上不起作用。你可以参考以下答案:你知道
窗口的原因吗。addEventListener
?我在链接文档中看到了建议,但我没有看到任何关于为什么需要它的解释。我认为这也很奇怪目前,我没有看到任何
window.onkeyup=函数(事件)的示例{…
。它看起来像是
窗口。onkeyup
只能引用一个函数,不能调用匿名函数本身。因此,您必须调用另一个函数,为什么不使用事件侦听器呢。关于
窗口。onkeyup
的文档很少,因此出于兼容性原因,我也不能推荐它。我尝试了onbeforeunload()但它在Mobile Safari上不起作用。我发现有一个网站在这个功能上运行得很好:。但不确定它们是如何实现的it@user44858,我没有访问欢迎页面的权限,但我进入了登录页面。他们使用的是Chrome附带的标准表单重新提交警报。嗨@Adam,我也没有访问权限。我怎么可能没有呢相同的标准表单重新提交?嗨@Jasen,我想要的是当用户尝试刷新页面时得到提示消息。您的解决方案似乎避免了提示消息。?哎呀!我已经添加了有关如何执行所需操作的说明。
onBeforeUnload
也将在导航离开或关闭该页面时运行。如果您希望这样做,我们将继续e是这个而不是这个。Hi@Jasen.onBeforeUnload()在Mobile Safari上不起作用,所以我正在寻找一种方法来模拟重复表单提交。我希望在主页上有此功能,因此无法为此创建链接。你有什么想法吗?是的,如果他们用GET请求点击URL,使用javascript表单提交向你的主页发出post请求,基本上如果发送一个GET request向他们发送包含POST表单和javascript(如
文档)的HTML。表单[0]。提交()
@user44858我已使用支持Mobile Safari的选项更新了我的答案
window.addEventListener("keyup", checkForRefresh, false);

var checkForRefresh = function(event) {
   if (event.keyCode == 116) {
        alert("Data will be lost if you refresh the page. Are you sure?");
   }
};