from Are you sure your unload handler is firing in IE? on Ajaxian

Johan Sörlin씨가 IE에서 때때로 unload 이벤트가 일어나지 않는다는 사실을 발견했습니다:

우리는 최근에 특정 웹사이트에서 unload 이벤트가 일어나지 않는 IE의 심각한 버그를 발견했습니다. 버그를 추적한 결과, unload 이벤트는 페이지가 미처 다 로딩되기 전에 우리가 다른 페이지로 이동했기 때문에 일어나지 않는 거였습니다.

이 문제는 꽤 중요한데, unload 이벤트가 IE의 순환 참조 메모리 누수를 방지하기 위해서 일반적으로 사용되기 때문입니다. 따라서, 만약 페이지의 컨텐트 로딩이 완료되기 전에 페이지를 벗어난다면 이 버그는 IE에서 unload 이벤트에 의존하는 모든 Ajax 라이브러리/프레임웍이 제대로 동작하지 않도록 만들 것입니다.

버그 샘플이 있습니다, 페이지를 IE에서 실행하고 페이지에 있는 과정을 따라 해보세요.

그가 작업한 것입니다:
function fixUnload() {
        // Is there things still loading, then fake the unload event
        if (document.readyState == 'interactive') {
                function stop() {
                        // Prevent memory leak
                        document.detachEvent('onstop', stop);
                        // Call unload handler
                        unload();
                };
                // Fire unload when the currently loading page is stopped
                document.attachEvent('onstop', stop);
                // Remove onstop listener after a while to prevent the unload function
                // to execute if the user presses cancel in an onbeforeunload
                // confirm dialog and then presses the stop button in the browser
                window.setTimeout(function() {
                        document.detachEvent('onstop', stop);
                }, 0);
        }
};

function unload() {
        alert('Unload event occured.');
};

window.attachEvent('onunload', unload);
window.attachEvent('onbeforeunload', fixUnload);

또 다른 IE 소식입니다. IE6에서 문제가 되므로, CSS 클래스 이름에 (유효한) _ 문자를 사용하면 안되다는 것을 명심하세요.
Posted by 행복한고니 트랙백 0 : 댓글 2

댓글을 달아 주세요

  1. addr | edit/del | reply BlogIcon 허만재 2009.02.06 11:18

    좋은글 좀 퍼가겠습니다.
    건승하세요