programing

window.on before unload and window.on unload가 Firefox, Safari, Opera에서 작동하지 않습니까?

lovejava 2023. 10. 26. 20:27

window.on before unload and window.on unload가 Firefox, Safari, Opera에서 작동하지 않습니까?

채팅 어플리케이션에서 어플리케이션이 닫히면 사용자에게 확인을 받아야 합니다.

그래서 제가.window.onbeforeunload확인 경보를 위해.window.onunload위해서logout().

  1. 하지만 IE와 Chrome에서 두 기능이 모두 작동합니다. (애플리케이션은 잘 작동합니다.)

  2. window.onbeforeunload오페라에서 작동하지 않으며 파이어폭스에서는 내 메시지가 표시되지 않습니다.

  3. window.onunload사파리, 오페라, 파이어폭스에서 작동하지 않습니다.

내 자바스크립트 코드는 다음과 같습니다.

// 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>

유감스럽게도 사용 중인 방법은 해당 브라우저에서 지원되지 않습니다.제 답변(이를 지지하지 않는 행동)을 지지하기 위해 아래 링크를 제공했습니다.

onbeforeunload그리고.onunload일을 하지 않는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/

당신은 차라리 사용을 시도할 수 있습니다.pagehidesafari 브라우저에서 이벤트 대신onunload.

onunload일을 하지 않는firefox... 이를 뒷받침하기 위해

https://bugzilla.mozilla.org/show_bug.cgi?id=681636

그들은 FF에서도 아직 해결책을 제시하지 못하고 있습니다.

다음은 firefox 및 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;
            });

저는 jQuery's를 사용하여 IE 및 FF에서 작동할 수 있었습니다.

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

});

대신: unload, on unload 또는 on unload 전에

해결책을 찾았습니다.onunloadAjax 비동기 요청을 동기 요청으로 변경하여 Opera를 제외한 모든 브라우저에서 사용할 수 있습니다.

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

오페라를 제외한 모든 브라우저에서 잘 작동합니다.

다운로드 시 이벤트가 일부 브라우저에서 호출되는 것은 아닙니다.더 나쁜 것은 언로드 이벤트 전에 on의 반환 값을 확인할 수 없습니다.그러면 로그아웃 기능을 실제로 수행할 수 없습니다.

하지만 이것을 해킹할 수 있습니다.

언로드 전 이벤트에서 로그아웃을 먼저 호출합니다.사용자에게 메시지를 표시합니다.사용자가 로그아웃을 취소하면 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;
};

Firefox는 메시지를 언로드하기 전에 사용자 지정을 표시하지 않습니다.Mozilla는 오해의 소지가 있는 텍스트를 보여줄 수 있는 악의적인 사이트로부터 최종 사용자를 보호하고 있다고 말합니다.

언급URL : https://stackoverflow.com/questions/14645011/window-onbeforeunload-and-window-onunload-is-not-working-in-firefox-safari-ope