2012-02-10 3 views
1

사용자가 브라우저 창을 닫을 때 서버에 알리고 싶습니다. 창 언로드시 요청을 보내지 않아도됩니다.

나는 그것이 그 아마 설명서에 말했다되어, 사실에도 불구하고,

$(window).bind("beforeunload", function() { 
    $.get("${contextPath}/notify?direction=logout"); 
}); 

$(window).unload(function() { 
    $.get("${contextPath}/notify?direction=logout"); 
}); 

$(window).unload(function() { 
    $.ajax({ 
     url: "${contextPath}/notify?direction=logout" 
    }); 
}); 

하지만 둘 다 일 잘 모든 시도 할까요.

파이어 폭스에서는 창이 닫힐 때만 알림이 표시되지만 새로 고침 할 때 알림이 없습니다. 크롬에는 나도 마찬가지입니다.

Firebug 또는 Chrome 개발자 도구에서이 스크립트를 추적하려고 시도했지만 추적 할 경우 작동하기 시작했습니다. 그래서 창을 닫거나 탐색하기 전에 요청을 보낼 시간이 없기 때문에 정상적으로 작동하지 않는다고 생각합니다.

사실인가요? 내 일을 완수하는 방법?

해결이는 일 : 자바 스크립트가 차단 된 페이지 언로드에서 실행하는 경우 사용자가 페이지를 종료하는

$(window).bind("beforeunload", 
    function() { 
     $.ajax({ 
      async: false, 
      url: 'notify' 
     }); 
    } 
); 
+0

첫 번째 생각 : AJAX는 작업을위한 잘못된 도구입니다. 당신은 SJAX (동기식)를 사용해야합니다. AJAX는 정의상 GUI 스레드를 해제하여 처리를 계속합니다 [이 경우에는 언로드]. – Shad

+0

이 답변을 확인하십시오 : http://stackoverflow.com/a/9234785/252780 –

답변

3

응답이 너무 아약스 요청이 중단 얻을 수 있습니다 온다 전까지 브라우저가 대기하지 않습니다 때문에 매우 까다 롭습니다.

beforeunload 이벤트에서 이와 같은 방법을 시도해 볼 수 있습니다.

$(window).bind("beforeunload", function() { 
    $.ajax({ 
     async: false,//This will make sure the browser waits until request completes 
     url: "${contextPath}/notify?direction=logout" 
    }); 
}); 
+0

신뢰할 수있는 및 시도 할 수 있습니다 및 작동하지, 프로덕션 환경에서 사용해야합니다. –

0

당신은 운이있어, 그것은 불가능하다.

모든 스팸을 상상해보십시오.

일부 브라우저에서는 언로드 이벤트가 발생하지만 스크립트와 페이지 정리간에 경쟁 조건이 발생합니다.

감사

0

는 내가 다시이 시나리오 오랜 시간 작업 한 때문에 주석으로이 말을하고 싶지 않아요. 최종 사용자가 우연히 또는 의도적으로 브라우저를 닫을 때 모든 정보를 서버에 저장합니다 ( ). 나는 당신에게 말할 것입니다. 그것은 훌륭했습니다.,

나는 위대한 일을한다고 말했습니까? Firefox와 IE에서만 가능했습니다. 많은 다른 브라우저 (예 : Opera, Safari)에서는 이 실패했습니다.

내 친절한 조언은 브라우저에만 한정된 이므로 이러한 기능에 의존하지 않아야합니다.

1

가능한 경우에도 여전히 권장하지 않습니다. 이 작업을 수행하는 경우 모든 브라우저에서 작동하지 않을 수 있으며 여전히 전적으로 해당 사항에 대해 조언 할 것입니다.

사용자가 도메인을 떠날 때 필사적 인 경우 폴백 또는 폴백을 사용하는 웹 소켓을 사용하십시오.

또한 사이트에있는 동안 쿠키를 주기적으로 업데이트하기 위해 짧은 시간 제한 및 사용 간격을 제공 할 수 있습니다.

또한 다음 페이지가로드되기 전에 이벤트가 시작되기 때문에 추적하는 동안 작업을 "시작"합니다. 잠시 지났지 만 지난 번에 이러한 이벤트를 수행했지만 일부 브라우저는 다음 페이지가로드되는 동안 일정 기간 동안 코드를 실행할 수 있습니다.

+0

당신이 말한 백업 솔루션을 가지고 있기 때문에 100 % 신뢰성이 내 작업에는 이상이 아닙니다. 정기 폴링 문제는 빠르게 작동하지 않는다는 것입니다. 그래서 일부 브라우저에서 작동하는 빠른 솔루션이 필요합니다. – Dims

관련 문제