복붙노트

[JQUERY] 어떻게입니다 onbeforeunload 대화 상자를 무시하고 내 자신으로 대체 할 수 있습니까?

JQUERY

어떻게입니다 onbeforeunload 대화 상자를 무시하고 내 자신으로 대체 할 수 있습니까?

해결법


  1. 1.당신의 최선의 방법은 그것으로 작업을 할 수 있도록, onbeforeunload 대한 기본 대화를 수정할 수 없습니다.

    당신의 최선의 방법은 그것으로 작업을 할 수 있도록, onbeforeunload 대한 기본 대화를 수정할 수 없습니다.

    window.onbeforeunload = function() {
        return 'You have unsaved changes!';
    }
    

    다음은 Microsoft에서 제공하는이에 대한 참조입니다 :

    문제는 것 같다 :

    그 결과, 기본 대화에서 그것을 방지하기 위해 onbeforeunload에 거짓을 할당하는 방법이있을 것 같지 않습니다됩니다.

    jQuery를에 추가 참고 :

    편집 2018년 9월 4일 :입니다 onbeforeunload 대화 상자에서 사용자 정의 메시지 이후 사용되지 않습니다 크롬-51 (CF : 릴리스 노트)


  2. 2.어떻게 jQuery를 사용하여, 나를 위해 일한과 IE8, 크롬과 파이어 폭스에서 테스트입니다 :

    어떻게 jQuery를 사용하여, 나를 위해 일한과 IE8, 크롬과 파이어 폭스에서 테스트입니다 :

    $(window).bind("beforeunload",function(event) {
        if(hasChanged) return "You have unsaved changes";
    });
    

    어떤 프롬프트가 여기에 IE와 다른 브라우저 행동 사이에 차이가 있기 때문에 필요하지 않은 경우 아무것도 반환하지 않는 것이 중요합니다.


  3. 3.당신이 어떤 상황에있는 상자에 대해 할 수있는 일이 아니지만, 당신은 링크를 누군가가 클릭을 가로 챌 수 있습니다. 나를 위해, 이것은 대부분의 시나리오에 대한 노력의 가치가 있었다 및 대체로서, 나는 unload 이벤트를 떠 났어요.

    당신이 어떤 상황에있는 상자에 대해 할 수있는 일이 아니지만, 당신은 링크를 누군가가 클릭을 가로 챌 수 있습니다. 나를 위해, 이것은 대부분의 시나리오에 대한 노력의 가치가 있었다 및 대체로서, 나는 unload 이벤트를 떠 났어요.

    내가 대신 표준 jQuery를 대화의 모난를 사용했습니다, 그것은 여기에 있습니다 : http://onehackoranother.com/projects/jquery/boxy/

    $(':input').change(function() {
        if(!is_dirty){
            // When the user changes a field on this page, set our is_dirty flag.
            is_dirty = true;
        }
    });
    
    $('a').mousedown(function(e) {
        if(is_dirty) {
            // if the user navigates away from this page via an anchor link, 
            //    popup a new boxy confirmation.
            answer = Boxy.confirm("You have made some changes which you might want to save.");
        }
    });
    
    window.onbeforeunload = function() {
    if((is_dirty)&&(!answer)){
                // call this if the box wasn't shown.
        return 'You have made some changes which you might want to save.';
        }
    };
    

    당신은 다른 이벤트에 연결하고, 필터 많은 종류 앵커의 클릭이 있었는지에 있지만, 수이 나를 위해 작품과 내가하고 싶은 및 사용하거나 개선하기 위해 다른 사람에 대한 예로서 역할을한다. 생각 나는이 솔루션을 원하는 사람들이 공유 할 것입니다.

    그대로 나는, 그래서이되지 않을 수 있습니다 작업을 코드를 잘라했다.


  4. 4.1) 사용하지으로 onUnload, onbeforeunload.

    1) 사용하지으로 onUnload, onbeforeunload.

    2) 중요한 것은 return 문을 실행하지 않도록하는 것입니다. 나는 당신의 핸들러에서 돌아 피하기 위해, 이것에 의해, 의미하지 않는다. 당신은 모든 권리를 반환하지만, 당신은 당신이 함수의 끝에 도달하고 return 문을 실행하지 않도록 보장함으로써 그것을 할. 이러한 조건에서 내장 된 표준 대화 상자가 발생하지 않습니다.

    3) onbeforeunload 사용하는 경우, 서버에 정리를 위해 unbeforeunload 처리기에서 아약스 호출을 실행할 수 있지만 동기 하나 여야합니다, 당신은 기다려야하고 onbeforeunload 처리기에서 응답을 처리해야 (여전히 존중 조건 (2) 위). 나는이 작업을 수행하고 그것을 잘 작동합니다. 당신은 동기 아약스 전화를 할 경우 응답이 돌아올 때까지, 모든이 개최된다. 비동기 하나, 서버의 응답을 걱정하지 않는 것이 사고를 할 경우, 페이지 언로드 계속하고 아약스 호출이 프로세스에 의해 중단 -이 실행중인 경우 원격 스크립트를 포함.


  5. 5.수익을 배치하십시오; 대신 메시지의 ..이 나를 위해 대부분의 브라우저를하고있다. (이것은 단지 정말 대화의 선물을 방지)

    수익을 배치하십시오; 대신 메시지의 ..이 나를 위해 대부분의 브라우저를하고있다. (이것은 단지 정말 대화의 선물을 방지)

    window.onbeforeunload = function(evt) {            
            //Your Extra Code
            return;
    }
    

  6. 6.이것은 피할 스팸 지금 크롬에서 수행 할 수없는, onbeforeunload 자세한 내용은 사용자 정의 메시지를 표시되지 자바 스크립트를 참조하십시오.

    이것은 피할 스팸 지금 크롬에서 수행 할 수없는, onbeforeunload 자세한 내용은 사용자 정의 메시지를 표시되지 자바 스크립트를 참조하십시오.


  7. 7.으로 onUnload 기능은 사용자의 choise가 페이지를 leaveing ​​경우에만 호출 때문에, 사용자에 의해 가압 (확인 또는 취소)하는 버튼을 감지 할 수 있습니다. DOM을 축소되고 있기 때문에 가능성이 funcion에 Althoug은 제한된다. 당신은 자바 스크립트를 실행할 수 있지만 POST는 아무것도하지 않습니다 아약스 그러므로 당신은 자동 로그 아웃이 메도을 사용할 수 없습니다. 그러나 대한 해결책이있다. 은 window.open 사용자가 새로운 윈도우 개구가 로그 아웃 할 있도록으로 onUnload funcion 실행 ( 'logout.php').

    으로 onUnload 기능은 사용자의 choise가 페이지를 leaveing ​​경우에만 호출 때문에, 사용자에 의해 가압 (확인 또는 취소)하는 버튼을 감지 할 수 있습니다. DOM을 축소되고 있기 때문에 가능성이 funcion에 Althoug은 제한된다. 당신은 자바 스크립트를 실행할 수 있지만 POST는 아무것도하지 않습니다 아약스 그러므로 당신은 자동 로그 아웃이 메도을 사용할 수 없습니다. 그러나 대한 해결책이있다. 은 window.open 사용자가 새로운 윈도우 개구가 로그 아웃 할 있도록으로 onUnload funcion 실행 ( 'logout.php').

    function onunload = (){
        window.open('logout.php');
    }
    

    사용자가 페이지 또는 가까운 활성 창 및 사용자를 떠날 때 호출이 코드는 'logout.php'에 의해 기록. 새로운 창 닫기 즉시 로그 아웃 PHP 코드로 구성하는 경우 :

    window.close();
    

  8. 8.나는 내 메시지와 함께 자신의 대화 상자를 얻을 확인했다, 같은 문제에 직면하지만, 내가 직면 한 문제가 있었다 : 1) 내가 단지 닫기를 클릭 그것을 원하는 모든 네비게이션에 메시지를 제공했다. 2) 사용자가 선택을 취소하면 내 자신의 확인 메시지가 여전히 브라우저의 기본 대화 상자를 보여줍니다.

    나는 내 메시지와 함께 자신의 대화 상자를 얻을 확인했다, 같은 문제에 직면하지만, 내가 직면 한 문제가 있었다 : 1) 내가 단지 닫기를 클릭 그것을 원하는 모든 네비게이션에 메시지를 제공했다. 2) 사용자가 선택을 취소하면 내 자신의 확인 메시지가 여전히 브라우저의 기본 대화 상자를 보여줍니다.

    다음은 내 마스터 페이지에 쓴 내가 찾은 솔루션 코드입니다.

    function closeMe(evt) {
        if (typeof evt == 'undefined') {
            evt = window.event; }
        if (evt && evt.clientX >= (window.event.screenX - 150) &&
            evt.clientY >= -150 && evt.clientY <= 0) {
            return "Do you want to log out of your current session?";
        }
    }
    window.onbeforeunload = closeMe;
    

  9. 9.

     <script type="text/javascript">
            window.onbeforeunload = function(evt) {
                var message = 'Are you sure you want to leave?';
                if (typeof evt == 'undefined') {
                    evt = window.event;
                }       
                if (evt) {
                    evt.returnValue = message;
                }
                return message;
            } 
        </script>
    

    http://www.codeprojectdownload.com에서 참조


  10. 10.어떤 약은 "바인드"명령 "한"의 전문 버전을 사용할 수 있습니다. 이벤트 핸들러가 최초로 실행되면, 그것은 자동으로 이벤트 핸들러로서 삭제된다.

    어떤 약은 "바인드"명령 "한"의 전문 버전을 사용할 수 있습니다. 이벤트 핸들러가 최초로 실행되면, 그것은 자동으로 이벤트 핸들러로서 삭제된다.

    $(window).one("beforeunload", BeforeUnload);
    

  11. 11.각도 (9) 접근 방법 :

    각도 (9) 접근 방법 :

    constructor() {
        window.addEventListener('beforeunload', (event: BeforeUnloadEvent) => {
         if (this.generatedBarcodeIndex) {
          event.preventDefault(); // for Firefox
          event.returnValue = ''; // for Chrome
          return '';
         }
         return false;
        });
       }
    

    브라우저 지원 및 사용자 정의 메시지의 제거 :

  12. from https://stackoverflow.com/questions/276660/how-can-i-override-the-onbeforeunload-dialog-and-replace-it-with-my-own by cc-by-sa and MIT license