티스토리 뷰

발생일: 2011.11.03

문제:
페이지에 beforeunload 이벤트를 바인딩 해두고,
location.href 속성을 변경했다.

이때 발생하는 beforeunload 프롬프트에서 '취소'를 누를 경우, 
IE7에서 '지정되지 않은 오류입니다 (Error not specified 또는 Unspecified error)'라는 문구로 에러가 발생한다.

문제가 뭘까?

해결책:
같은 문제에 대한 재현 방법은 아래와 같다.

  1. beforeunload 이벤트를 바인딩하고,
  2. 페이지 변경을 위해 location.href 속성에 새로운 값을 할당하거나,
      또는 eval() 구문을 통해 페이지를 변경한다.
  3. beforeunload 이벤트에 의해 발생하는 프롬프트에서 '취소'를 클릭한다.
  4. IE7에서는 지정되지 않은 오류를 던진다.

IE의 버그로 파악되지만, 이 문제에 대한 정확한 버그 리포팅은 찾지 못했다.


여튼, 해결 방법은, 좀 찝찝하지만 location.href 구문을 try/catch 로 감싸는 것.


  window.onbeforeunload = confirmBeforeClose;

  function confirmBeforeClose( ) {
    return 'You have made changes on this page that will be lost if you navigate away without saving.';
  }

  function leavePage( ) {
     try {
          location.href = "http://www.example.com";
     } catch(e) { }
  }



반응형
댓글
공지사항