2012-02-22 4 views
4

서버 (Socket.IO) 연결이 5 초 이상 자동으로 종료되면 페이지가 다시로드되는 '안전'코드가있는 웹 앱이 있습니다 (일반적으로 고객 사이트 방화벽/깨진 프록시 문제).브라우저가 새 페이지를로드하는 중임을 감지하는 방법

새 페이지로드가 시작되자 마자 Socket.IO 연결이 중지되지만 안전 코드는이를 볼 수 없습니다. 느린 페이지로 이동하면 안전 코드가 실행되고 이전 페이지로 돌아갑니다.

브라우저가 현재 새로운 (느린) 페이지가로드 될 때까지 기다리는 지 여부를 알 수 있어야합니다 (이 코드가 다시로드되기 직전).

모든 링크 (주소 표시 줄을 통해 탐색을 포착하지 않음)에 jQuery 클릭 이벤트를 넣는 것 이외에 어떤 방법을 사용합니까?

감사합니다,

크리스.

답변

12

모니터링 window.onbeforeunload이 트릭을 수행합니다. 사용자가 멀리 탐색하기 시작하면 바로 시작됩니다.

시도의 모든 페이지에 크롬 콘솔에서 입력이하고 어떤 링크를 클릭 :

window.onbeforeunload = function() { console.log("oh noes"); } 
2

내 권장 사항 : 소켓을 분리 할 때 페이지를 다시로드하지 않도록 코드를 수정하십시오. 문제 해결됨.

편집
난 당신이 단순히 isReloading 때 페이지를 다시로드 등의 변수를 설정할 수도있을 것 같군요. onbeforeunload도 모니터해야하며, 먼저 발생하는 이벤트를 확인하십시오 : 연결 해제 또는 이벤트 언로드. 연결 해제가 먼저 발생하면 연결이 끊어집니다. isReloading 플래그를 트리거하고 다시로드하십시오. onbeforeunload에서 플래그가 설정되었는지 확인합니다. 느린 페이지로드 여부를 확인하는 개념을 역으로 수행하십시오. 다시로드 중인지 확인하십시오.

+0

네는 동의합니다. 확인할 방법이 없습니다. – Asken

+0

고마워요,하지만 그건 협상 할 수 없습니다. – fadedbee

관련 문제