如何在页面刷新时阻止调用onbeforeunload

我希望在刷新页面时阻止调用函数confirmExit() 。 有可能吗?

  window.onbeforeunload = confirmExit; function confirmExit() { $.post("test.php"); }  

你不能。 页面刷新就像导航和卸载DOM一样,因此将始终调用onbeforeunload事件。

对于您正在寻找的内容,控制刷新网页的最佳方法是使用onKeyDown函数。 不幸的是,直接从浏览器中按下刷新按钮将再次加载DOM,因此从技术上讲,无法阻止此操作的刷新。

遇到同样的问题,我找到了这个网页http://asquare.net/javascript/tests/KeyCode.html ,您可以在其中validation浏览器对键盘事件的响应。 在这里你可以开始弄清楚为什么onKeyDown是最好的选择。 Chrome不会对onKeyPressfunction做出反应。

您只需要一个变量来控制刷新操作。 如果用户按下该键,则不会执行onBeforeUnload操作。

 var refresh = false; //Control variable to control refresh access j$(window).bind('beforeunload', function(){ if (refresh == false) { // If F5 is not pressed return "Do you really want to leave?"; } }); 
 j$(window).keydown(function(event) { if (event.keyCode == 116) { // User presses F5 to refresh refresh = true; } }); 

有两件事需要考虑。 (1)释放f5键时执行“window.onbeforeunload”函数(onkeyup)。 修改对话外观的任何内容必须在onkeydown之前发生。 (2)如果返回后跟空值,则该函数不起作用。

如果将全局变量设置为用作返回值,并在按下f5键时将其设为null,则在使用f5刷新时不会出现对话框。 但是,如果按下“关闭”按钮,则会出现。 请注意,即使返回值为null,“onbeforeunload”中的代码也会运行,因此如果您希望同时禁用代码,则必须检查返回值。

 document.onkeydown = KeyCheck; window.returnMessage="You are now logged out."; function KeyCheck(e) { var key = (window.event) ? event.keyCode : e.keyCode; alert(key); if(key==116) {window.returnMessage=null;} } $(function(){ window.onbeforeunload = function(event) { if(window.returnMessage.length > 0) {logoutFunction();} return window.returnMessage; } });