2012-03-12 2 views
1

폼의 본문에 onunload 메서드가 작성되었습니다. 페이지에 대량의 컨텐츠가 서버에서 스트리밍되기 때문에 전체 양식을 다운로드하는 데 시간이 걸립니다. 폼이 브라우저로 다운로드되는 동안 사용자가 윈도우 닫기 버튼을 클릭하면 언로드 이벤트 (서버 측 액션을 호출하여 플래그를 재설정하도록 작성)가 가끔 트리거되지 않습니다. 언로드 방법은 페이지의 끝 부분에 기록됩니다. 이유가 무엇입니까? 거기에 onunload 호출되도록 보장 할 수있는 어쨌든 있나요?IE에서 항상 HTML 페이지 언로드가 호출되지 않습니다

+0

과거 경험에서 볼 때, onunload 이벤트는 원하는만큼 실행하도록 보장되지 않습니다. 코드가 끝나기 전에 다음 페이지가로드되면 완료되지 않을 수 있습니다. 응용 프로그램에 따라 코드를 실행할 시간을주기 위해 경고 또는 확인 프롬프트를 표시 할 수 있습니다. – GoldenNewby

답변

0

두 가지 이유가 있습니다. 당신이 말했던 것처럼, 브라우저가 언로드에 도달하지 않을 수도 있으므로 body 태그 위에 선언해야합니다.

다른 하나는 GoldenNewby가 이미 말했듯이 경고와 같이 코드를 마무리 할 시간이 필요하다는 것입니다. 이는 자바 스크립트가 다음 페이지가 준비 될 때 메모리에서 지워지고 실행이 이전 스크립트에서 단순히 중지되기 때문입니다. 스크립트가 페이지로드보다 시간이 덜 걸린다는 것을 보장 할 수 있다면 경고는 필요하지 않지만 실행에 2ms 이상 걸릴 수 있다면 약간의 시간을 들여야합니다.

0

IE에는 onbeforeunload 이벤트가 있지만 대신 사용할 수 있습니다. onunload이 이미 일을 끝내면 onbeforeunload 일찍 끝낼 수 있도록 플래그를 설정하십시오.

window.onunload = window.onbeforeunload = function() { 
    if (window.isAlreadyUnloaded) return; 
    window.isAlreadyUnloaded = true; 
    // do your stuff here. 
} 
1

Windows.onload가 아직 실행되지 않은 경우 IE가 언로드 이벤트를 실행하지 않는다는 사실이 아마 있습니다. 그 해결책은이 블로그 포스트에 설명되어 있습니다 : http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/

+0

참고 : 블로그 게시물에 설명 된 onstop 이벤트는 IE의 최신 버전 (최소한 10 및 11)에서 동일한 방식으로 작동하지 않습니다. onload 이벤트 이전에 페이지를 탐색 (또는 새로 고침)하면 실행되지 않습니다. 나에게 맞는 해결책은 핸들러를 onload뿐만 아니라 onbeforeunload 이벤트에 바인드하는 것이었다. –

관련 문제