2013-02-10 4 views
0

내 응용 프로그램은 온라인/오프라인 상태로 사용자를 설정할 수 있어야합니다.window.onbeforeunload 항상 발사하지?

나는이 문제를 window.onbeforeunload를 사용하여 사용자가 페이지를 떠나는시기를 확인함으로써 해결했습니다.

문제는 아래의 코드가 항상 실행되는 것은 아니므로 일부 사용자가 페이지를 떠날 때 온라인 상태 인 것입니다.

이 내 현재 코드입니다 :

window.onbeforeunload = function (event) { 
    $.ajax({ 
     type: 'GET', 
     url: './changeStatus.php?cid=' + ccID + '&status=0', 
     contentType: "application/json", 
     dataType: 'json', 
     cache: false, 
     async: false, 
     success: function (data) {}, 
     error: function (e) { 
      //console.log(e); 
     } 
    }); 
    return; 
}; 

난 항상 이 강제 할 수있는 방법 어떤 아이디어를 실행하세요? (모든 브라우저에서)

+1

모든 주요 브라우저에서 지원되어야합니다. 정확히 발사하지 않을 때입니까? – adeneo

+0

간혹 IE에서는 – Laine

+0

IE가 도입 된 것 같습니다. IE4 이후까지 지원됩니다. 발포하지 않는 경우에 대한 세부 정보를 추가해야합니다. 다른 한편, IE에서 문제는 일반적으로 페이지를 닫기 전에 요청을 보낼 정도로 아약스 함수가 ​​빠르지 않을 것입니다. 캐시를 비활성화하여 지연 시키더라도 (btw는 작동하지 않습니다.) – adeneo

답변

0

스크립트는 페이지가 닫힐 때 항상 실행되지만, 항상 서버 호출에 성공한다는 것을 의미하지는 않습니다.

예를 들어 사용자가 페이지를 닫기 전에 인터넷 연결을 끊으면 스크립트가 서버에 아무 것도 보낼 수 없습니다. 페이지가 닫힐 때마다 브라우저에서 전화를받을 수는 없습니다.

사용자가 마지막으로 들어봤을 때 서버에서 계속 추적 할 수 있으므로 잠시 동안 페이지를 요청하지 않은 경우 사용자를 오프라인으로 설정할 수 있습니다. 또 다른 대안은 사용자가 페이지에있는 동안 서버에 요청을 자주 보내고 요청이 중단되면 서버는 사용자가 사라 졌다는 것을 알게됩니다.

관련 문제