카테고리 없음

[자바 스크립트] Javascript-언로드 / 페이지 숨기기 이벤트 내 AJAX 호출

행복을전해요 2021. 2. 9. 04:13

onunload와 onbeforeunload를 엉망으로 만든 지 오래됐지만 기억 나는군요. onunload를 사용하려고 할 때 페이지 언로드 요청이 이미 진행 중이기 때문에 작업을 수행 할 시간이 매우 짧습니다. 일반적으로 onbeforeunload 메서드 내에서 코드를 실행해야합니다. "기본 팝업 상자를 억제하거나 사용자 응답을 볼 수있는 방법을 제공하지 않는 한 내가 알지 못하는 마법 같은 해킹이없는 한"에 대한 질문에 대해서는 기본 팝업 상자를 억제하는 방법이 있습니다. 의도는 그것을 사용자 지정 것으로 교체하는 것입니다. 운이 좋지 않습니다. 팝업 상자가 나타나지 않게하려면 onbeforeonload 호출에서 아무것도 반환하지 마십시오.

나는 당신이 요구하는 것과 매우 유사한 것을해야했던 것을 기억합니다. 나는 또한 JQuery를 사용할 수 없었지만 AJAX를 사용하는 대신 jsp에 대한 호출을 사용하여 자격 증명을 삭제했습니다. 실제로 Stack Overflow에 대한 질문을하고 직접 답변했습니다 : How to logout during onbeforeunload / onunload using Javascript . 내 jsp 호출을 AJAX 호출로 바꾸시겠습니까?

다음은 onunload와 비교 한 unbeforeunload의 좋은 스켈레톤 예제입니다.

<script type="text/javascript"> //may not be neccesary for your code

window.onbeforeunload=before;
window.onunload=after;

function before(evt)
{
   return "This will appear in the dialog box allong with some other default text";
      //If the return statement was not here, other code could be executed silently (with no pop-up)
      }
      
      function after(evt)
      {
         //This event fires too fast for the application to execute before the browser unloads
         }
         
         </script>
         

위의 코드는 브라우저가 닫힐 때 팝업 창 표시OnUnload Alert Error "NS_ERROR_NOT_AVAILABLE" 에서 유사한 질문에 대한 답변의 결과입니다 .

onunload 대신 onbeforeunload를 사용하더라도 올바르게 기억하면 팝업을 표시하지 않으면 긴 코드 실행이 완료되지 않습니다. 이 답변이 직접 찾고있는 것이 아니라는 것을 알고 있지만 올바른 길로 인도하기를 바랍니다.

-------------------

실제로 pagehide에서 AJAX 요청을 수행하거나 (더 이상 사용되지 않지만 여전히 작동하는) 이벤트 핸들러를 언로드 할 수 있지만이 요청을 동 기적으로 만들어야합니다. 그렇지 않으면 요청이 Safari에 의해 버려집니다.

window.addEventListener("pagehide", function(evt){
  var request = new XMLHttpRequest();
    request.open('GET', '/bar/foo.txt', false);  // `false` makes the request synchronous
      request.send(null);
      
        if (request.status === 200) {
            // your request has been sent
              }
              }, false);
              


출처
https://stackoverflow.com/questions/22050341