개발 언어/자바 스크립트 java script

javascript 닫기, 새로고침 이벤트 처리 (정말 나가시겠습니까?)

삐뚤어진 개발자 2020. 1. 13.

목차

javascript  닫기, 새로고침 이벤트 처리 (정말 나가시겠습니까?)
javascript  닫기, 새로고침 이벤트 처리 (정말 나가시겠습니까?)

사용자가 게시물을 작성하다가 실수로 브라우저를 닫거나, 새로고침을 하면 여태껏 작성하던 내용을 모두 날릴 수 있다.

우리가 게시판이나 커뮤니티 웹 사이트를 만든다면, 이런 불상사를 막아야 된다.

 

 

이럴때 보통 javascript에서 제공하는 onbeforeunload 함수를 사용한다.

이름에서 추측할 수 있드시  unload 되기 전의 이벤트를 받는 함수다.

 

unload는 우리가 자주 사용하는 로드(load)의 반대말로 로드된 페이지가 꺼지는 것,

즉, 새로고침이나 브라우져를 닫았을 때, 실행되는 이벤트다.

 

 

사용법)

<html>
	<script>
		function test() {
		    window.onbeforeunload = function (e) {
                    return 0;
		    };
		}
	</script>
    
<body onload="test();">
</body>
</html>

 

스크립트 태그에  test() 함수를 선언하고, 안에 window.onbegoreunload를 선언한다. 

그리고 body 가 load 될때, test() 함수가 실행되도록  onload 에 test();를 넣어준다.

 

 

 

그리고 실행시키면, window.onbeforeunload가 실행된 상태기 때문에,

unload 이벤트가 발생하는지 계속 감시하고 있다가, 사용자가, 새로고침이나, 닫기를 눌렀을 때,

맨위의 이미지와 같이 나가기를 할것인지, 새로고침을 할것인지의 팝업이 나타난다. (인터넷 익스플로러도 마찬가지다.)

https://www.w3schools.com/jsref/event_onbeforeunload.asp 

위의 링크로 가서 직접 실행해보길 바란다.

 

 

 

 

 

+ 추가적으로

 

닫기, 새로고침 이벤트를 받아 따로 처리할 수는 없나?

예를 들어, 사용자가 새로고침 할때는, 아무 메세지도 띄우지 않고, 닫기를 눌렀을 때만, 메세지를 띄울수는 없나?

 

 

- 찾아보니 위의 처리는 어려울 것 같다.

 

자바스크립트에서 onbeforeunload 라는 함수만을 제공하고 있기 때문에,

이벤트 리스너를 호출 후 새로고침을 했을때, 호출되었던 이벤트 리스너를 취소하는 방법이 따로 없다.

 

 

 

 

 

참조 : https://developer.mozilla.org/ko/docs/Web/Events/beforeunload

 

beforeunload

beforeunload 이벤트는 윈도우, 문서 및 리소스가 언로드 될 때 발생합니다....

developer.mozilla.org

 

 

댓글