jquery windows.onbeforeunload和windows.onunload在火狐浏览器,Safari浏览器,Opera?

x33g5p2x  于 2022-12-26  发布在  jQuery
关注(0)|答案(6)|浏览(236)

在我的聊天应用程序中,我需要从用户那里得到确认,当我的应用程序关闭时。
因此,我使用window.onbeforeunload作为确认警报,使用window.onunload作为logout()
1.但这两个功能都在IE和Chrome中工作。(应用程序工作正常)

  1. window.onbeforeunload在Opera中不工作,我的消息不会在Firefox中显示。
  2. window.onunload无法在Safari、Opera和Firefox中运行。
    我的JavaScript代码将是:
// Used for confirmation, to closing the window 
window.onbeforeunload = function () {

    return  "Are you sure want to LOGOUT the session ?";
}; 

// Used to logout the session, when browser window was closed 
window.onunload = function () {

    if((sessionId != null)&&(sessionId!="null")&& (sessionId != ""))
        logout();
};

我还在JQuery中尝试了相同的函数,

<script type="text/javascript">

    $(window).on('beforeunload', function() {
        return 'Are you sure want to LOGOUT the session ?';
    });

    $(window).unload(function() {
        if ((sessionId != null) && (sessionId != "null") && (sessionId != "")) {
            logout();
        }
    });
    
</script>
iqxoj9l9

iqxoj9l91#

不幸的是,你正在使用的方法在那些浏览器中是不支持的。为了支持我的答案(这种不支持的行为),我在下面给出了链接。
onbeforeunloadonunload无法在opera中运行...以支持此操作
onbeforeunload in Opera
http://www.zachleat.com/web/dont-let-the-door-hit-you-onunload-and-onbeforeunload/
尽管onunload事件不能完全起作用,但如果用户单击链接以离开包含未保存表单的页面,则可以使用onunload显示警告。
onunload无法在safari中运行...无法支持此
https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
您可以尝试在safari浏览器中使用pagehide事件来代替onunload
onunload无法在firefox中运行...无法支持此功能
https://bugzilla.mozilla.org/show_bug.cgi?id=681636
他们还没有拿出一个解决方案,在FF太。

rkttyhzu

rkttyhzu2#

下面是IE、火狐和Chrome的工作解决方案:

var myEvent = window.attachEvent || window.addEventListener;
var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable

            myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox
                var confirmationMessage = 'Are you sure to leave the page?';  // a space
                (e || window.event).returnValue = confirmationMessage;
                return confirmationMessage;
            });
2ekbmq32

2ekbmq323#

我能够让它在IE和FF中使用jQuery的:

$(window).bind('beforeunload', function(){

});

代替:卸载、卸载时或卸载前

qlzsbp2j

qlzsbp2j4#

通过将 AJAX 异步请求更改为同步请求,我在除Opera之外的所有浏览器中获得了onunload的解决方案。

xmlhttp.open("POST","LogoutAction",false);

它适用于除Opera之外的所有浏览器。

velaa5lx

velaa5lx5#

onunload事件并不是在所有浏览器中都被调用的。更糟糕的是,你不能检查onbeforeunload事件的返回值。这阻止了我们实际执行注销功能。
不过,您可以绕过这个问题。
首先在onbeforeunload事件中调用logout,然后提示用户。如果用户取消注销,使用onfocus事件自动重新登录。有点落后,但我认为应该可以工作。

'use strict';

var reconnect = false;

window.onfocus = function () {
  if (reconnect) {
    reconnect = false;
    alert("Perform an auto-login here!");
  }
};

window.onbeforeunload = function () {
  //logout();
  var msg = "Are you sure you want to leave?";
  reconnect = true;
  return msg;
};
mefy6pfw

mefy6pfw6#

火狐根本不显示自定义的onbeforeunload信息。Mozilla说他们是在保护最终用户免受可能显示误导性文本的恶意网站的攻击。

相关问题