>웹 프론트엔드 >JS 튜토리얼 >HTML5 로컬 저장소를 사용하여 브라우저 새로 고침과 종료를 구별하는 방법은 무엇입니까?

HTML5 로컬 저장소를 사용하여 브라우저 새로 고침과 종료를 구별하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-03 16:26:29393검색

How to Distinguish Between Browser Refresh and Closure Using HTML5 Local Storage?

브라우저 새로 고침 작업과 닫기 작업 식별

두 작업 모두 ONUNLOAD 이벤트를 트리거할 때 페이지 새로 고침과 브라우저 닫기를 구별하는 것이 어려울 수 있습니다. 그러나 HTML5 로컬 스토리지와 클라이언트/서버 AJAX 통신을 사용하는 솔루션이 있습니다.

Onunload 이벤트 처리

페이지 창에서 onunload 이벤트 핸들러를 추가하세요.

function myUnload(event) {
    // Set a local storage flag indicating an unload event
    if (window.localStorage) {
        window.localStorage['myUnloadEventFlag'] = new Date().getTime();
    }

    // Notify the server of a disconnection request
    askServerToDisconnectUserInAFewSeconds(); // Synchronous AJAX call
}

온로드 이벤트 처리

페이지 본문에 다음과 같은 온로드 이벤트 핸들러를 추가하세요.

function myLoad(event) {
    if (window.localStorage) {
        // Check the time between the last unload event and the current time
        var t0 = Number(window.localStorage['myUnloadEventFlag']);
        var t1 = new Date().getTime();
        var duration = t1 - t0;

        if (duration < 10 * 1000) {
            // Page reloaded: Cancel disconnection request
            askServerToCancelDisconnectionRequest(); // Asynchronous AJAX call
        } else {
            // Tab/window closed: Perform desired action
        }
    }
}

서버측 관리

서버에서 연결 해제 요청을 수집하는 프로세스를 구현하고 시간 초과된 요청을 확인하기 위해 타이머 스레드를 예약합니다. 이 예에서는 5초 이내에 시간 초과된 요청으로 사용자의 연결을 끊습니다. 연결 해제 취소가 수신되면 목록에서 해당 요청을 제거합니다.

이 접근 방식은 탭/창 닫기와 링크/양식 제출을 구별하는 데에도 사용할 수 있습니다. 링크나 양식이 있는 모든 페이지와 해당 랜딩 페이지에 이벤트 핸들러를 배치합니다.

이 솔루션은 로컬 저장소를 사용하지만 HTML5 로컬 저장소를 지원하지 않는 브라우저에는 적합하지 않을 수 있습니다. 이러한 시나리오를 처리하기 위한 구체적인 접근 방식을 고려하세요.

위 내용은 HTML5 로컬 저장소를 사용하여 브라우저 새로 고침과 종료를 구별하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.