window.onbeforeunload不能在chrome中工作

这是我用于window.onbeforeunload的代码……

<head> <script> window.onbeforeunload = func; function func() { var request = new XMLHttpRequest(); request.open("POST", "exit.php", true); request.onreadystatechange = stateChanged; request.send(null); } function stateChanged() { if (request.readyState == 4 || request.readyState == "complete") alert("Succes!"); } </script> </head> 

这与IE浏览器和mozila的作品,但不适用铬…..请帮助……在此先感谢…..

看来,在最近版本的Chrome中,只能使用onbeforeunload才能设置警告消息。

 window.onbeforeunload = function () { return "Are you sure"; }; 

将工作。

Chrome中的其他代码似乎被忽略

知道我迟到了,但是我的头为什么我的自定义beforeunload消息不在Chrome中工作,正在读这个。 因此,如果其他人也一样,版本51以后的Chrome不再支持beforeunload上的自定义消息。 显然这是因为这个function被各种骗局滥用了。 相反,您会收到预定义的Chrome邮件,这可能会或可能不适合您的目的。 详情请见:

https://developers.google.com/web/updates/2016/04/chrome-51-deprecations?hl=en#remove-custom-messages-in-onbeforeload-dialogs

个人不认为他们select的消息是一个伟大的,因为它提到离开该网站,onbeforeunload最常见的合法用途之一是在Web表单脏处理/检查,所以这不是一个很好的措辞,作为很多用户仍然在您的网站上的时间,只是点击取消或重新加载button错误。

在chrome 21.0.1180.79上确认了这个行为

这似乎与XSS一样工作,如果你正在刷新页面或打开一个页面在相同的域+端口的脚本执行,否则只会执行如果你是返回一个string(或类似)和一个对话框将显示询问用户是否想要倾斜或停留在页面中。

这是一个令人难以置信的愚蠢的事情,因为onunload / onbeforeunload不仅用于要求/防止页面更改。

在我的情况下,我也使用它,保存在页面编辑过程中完成一些更改,我不想阻止用户更改页面(至less铬应尊重返回true或更改页面,而不问如果返回不是一个string),脚本运行时间限制就足够了。

这在Chrome中特别讨厌,因为在卸载页面时,onblur事件不会被发送到编辑元素,而只是简单地消失了页面并跳转到另一页面。 所以保存更改的唯一的改变是卸载过程,如果用户想改变它,现在不能没有STUPID的问题…当然,他想要的,我不想阻止… …

希望Chrome能以更加优雅的方式解决这个问题。

试试这个,它为我工作:

 window.onbeforeunload = function(event) { event.returnValue = "Write something clever here.."; }; 

尝试这个。 我试过了,它的工作原理。 有趣但Succes消息不需要像其他消息一样的确认。

 window.onbeforeunload = function() { if ( window.XMLHttpRequest ) { console.log("before"); //alert("before"); var request = new XMLHttpRequest(); request.open("POST", "exit.php", true); request.onreadystatechange = function () { if ( request.readyState == 4 && request.status == 200 ) { console.log("Succes!"); //alert("Succes!"); } }; request.send(); } } 

Chrome的当前版本需要设置事件的returnValue属性。 简单地从事件处理程序返回一个string不会触发警报。

 addEventListener('beforeunload', function(event) { event.returnValue = 'You have unsaved changes.'; });