IE 7,8 의 onbeforeunload 버그

방금 업무전에 황당한 일을 옆 직원이 겪었다.

“a 버튼을 클릭했을 뿐인데 onbeforeunload 가 동작한다.”

…?????

엉?

“페이지 바뀌나?”

“안바뀐다.”

엉??????????

갑자기 눈앞이 캄캄해지고. “일단 좀 더 수정해보겠다” 는 말을 듣고 검색해봤다..

살다살다 이런 버그도 있었다.

구글 검색 결과,

<a href="javascript:void(0)" onclick="javascript:alert('Hi');">Do Something </a>

그리고 onbeforeunload 이벤트 핸들러 내용

window.onbeforeunload = function() {
    return 'before?';
}

<

p>이 코드를 직접 IE 7이나 8에 돌려본다.

javascript 같은 타 프로토콜이고 뭐고 페이지가 안바뀌는데 onbeforeunload가 작동된다.

최신 브라우저는 페이지가 바뀌는 루틴이 감지되면 작동하는데, 이녀석은 프로토콜을 감지해서 루틴을 작동시키는건가?

거짓말같이 Hi 나온 뒤 before? 메시지가 들어왔다.

이렇게 수정하라.

<a href="#" onclick="javascript:alert('Hi');">Do Something </a> 

즉, onbeforeunload 이벤트가 있다면, a 태그에 href 안에 자스던 멜주소던 넣지 않는게 최선이다. 그리고 돌리면 된다.

Hi 만 뜨고 말 것이다.

오늘 어이없는 버그를 보고 내가 해결해주고 IE 개발자한테 이 짤을 던지고 끝내겠다.

A2vdf7PCAAAmcOe.jpg:large (474×245)

답글 남기기

Your email address will not be published / Required fields are marked *