사용자가 브라우저 창을 닫거나 페이지를 새로 고칠 때 최종 JavaScript 코드를 실행하는 방법이 있습니까?
나는 onload와 비슷한 것을 생각하고 있지만 onclose와 더 비슷합니까? 감사.
나는 항상 확인 상자가 팝업 (페이지 나가기 / 모질라에 머물러 있음) 또는 (크롬에서 새로 고침 / 다시로드하지 않음) 팝업으로 양보하는 onbeforeunload 메소드를 좋아하지 않습니다. 코드를 조용히 실행할 수있는 방법이 있습니까?
사용자가 브라우저 창을 닫거나 페이지를 새로 고칠 때 최종 JavaScript 코드를 실행하는 방법이 있습니까?
나는 onload와 비슷한 것을 생각하고 있지만 onclose와 더 비슷합니까? 감사.
나는 항상 확인 상자가 팝업 (페이지 나가기 / 모질라에 머물러 있음) 또는 (크롬에서 새로 고침 / 다시로드하지 않음) 팝업으로 양보하는 onbeforeunload 메소드를 좋아하지 않습니다. 코드를 조용히 실행할 수있는 방법이 있습니까?
답변:
이 둘 다 window.onbeforeunload
와 window.onunload
브라우저에 따라 다르게 사용되는. 창 속성을 함수로 설정하거나 다음을 사용하여 어싱 할 수 있습니다 .addEventListener
.
window.onbeforeunload = function(){
// Do something
}
// OR
window.addEventListener("beforeunload", function(e){
// Do something
}, false);
일반적으로 onbeforeunload
사용자가 페이지를 떠나는 것을 중지해야하는 경우에 사용됩니다 (예 : 사용자가 저장되지 않은 일부 데이터를 작업 중이므로 떠나기 전에 저장해야합니다). 내가 아는 onunload
한 Opera 에서 지원하지 않지만 항상 둘 다 설정할 수 있습니다.
좋아, 나는 이것에 대한 작동하는 해결책을 찾았고, 그것은 beforeunload
이벤트 를 사용한 다음 핸들러가 return을 만드는 것으로 구성됩니다 null
. 이것은 확인 상자 팝업없이 원하는 코드를 실행합니다. 다음과 같이 진행됩니다.
window.onbeforeunload = closingCode;
function closingCode(){
// do something...
return null;
}
도움이 되었기를 바랍니다.
return false;
동일한 작업을 수행하고 (즉, 기본 동작을 방지 함) 의미 상 더 정확 하다고 생각 합니다.
때로는 사용자가 페이지를 떠나고 있음을 서버에 알리고 싶을 수 있습니다. 예를 들어, 서버에 임시로 저장된 저장되지 않은 이미지를 정리하거나 해당 사용자를 "오프라인"으로 표시하거나 세션이 완료 될 때 기록하는 데 유용합니다.
역사적으로 beforeunload
함수 에서 AJAX 요청을 보내지 만 두 가지 문제가 있습니다. 비동기 요청을 보내면 요청이 올바르게 실행된다는 보장이 없습니다. 동기 요청을 보내면 더 안정적이지만 요청이 완료 될 때까지 브라우저가 중단됩니다. 느린 요청이라면 사용자에게 큰 불편이 될 것입니다.
다행히 이제 navigator.sendBeacon()
. 이 sendBeacon()
방법 을 사용하면 사용자 에이전트가 언로드를 지연 시키거나 다음 탐색의 성능에 영향을주지 않고 그렇게 할 수있는 기회가있을 때 데이터가 웹 서버로 비동기 적으로 전송됩니다. 이렇게하면 분석 데이터 제출과 관련된 모든 문제가 해결됩니다. 데이터가 안정적으로 전송되고 비동기 적으로 전송되며 다음 페이지의로드에 영향을주지 않습니다. 다음은 사용 예입니다.
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
다음에서 지원 됩니다.
현재 다음에서 지원되지 않습니다.
다음은 지원되지 않는 브라우저에 대한 지원을 추가해야하는 경우 sendBeacon () 에 대한 폴리 필입니다 . 브라우저에서 메서드를 사용할 수없는 경우 대신 동기식 AJAX 요청을 보냅니다.
http://example.com/script.php?token=something&var1=val1&var2=val2
GET에 넣는 것과 같이 요청을 보내는 것을 방해하는 것은 없습니다 .