2010-04-12 3 views
5
나는 "언로드"및 코드를 다음에 바인딩 "beforeunload"에 대한 시도

하지만 브라우저의 아무도를 사용하여 윈도우 언로드에 자바 스크립트 호출은 요청을 보내는?온 디맨드 JQuery와

+0

어떤 브라우저에서 실행하고 있습니까? 오랫동안 사파리는 '언로드'핸들러를 제대로 구현하는 데 문제가있었습니다. 그것이 아직도 사실인지 확실하지 않습니다. – Syntactic

답변

6

브라우저가이 코드가 완료 될 때까지 기다리지 않고 ... 실행 중입니다. alert('hi')을 추가하여 실행 상태를 확인하십시오.

당신이보고있는 문제는 일반적으로 unload 호입니다. 요청이 처리되기 전에 브라우저가 탐색하기에 앞서 ... 그리고 실행해야하는 코드가 없으면 완료해야합니다. 다음 페이지로 넘어갈 수있었습니다. 이것은 unload의 동작 방식입니다. 당신은 거기에 사용자를 잡으려고 전화를 동기로 만들 수 있지만, 을하지 말아주세요하십시오.

unload 이벤트는 가비지 수집이 현재와 같이 좋지 않은데 (여전히 IE에없는 경우) 필요한 DOM에 남아있는 항목을 정리하기 위해 주로 창에서 만들어졌습니다. .. AJAX 또는 메트릭 추적을 염두에두고 설계된 것은 아니 었습니다.

1

옵션 async를 false로 설정하면됩니다.

$(window).bind('unload', function(){ 
    $.ajax({ 
    cache: false, 
    async: false, 
    dataType: "script", 
     url: "test.php" 
    }); 
});