>  기사  >  웹 프론트엔드  >  JavaScript 뒤로 버튼이 작동하지 않는 문제에 대한 솔루션

JavaScript 뒤로 버튼이 작동하지 않는 문제에 대한 솔루션

PHPz
PHPz원래의
2023-04-21 09:08:51922검색

일상적인 웹 개발에서 우리는 페이지의 뒤로 버튼을 비활성화해야 하는 상황에 자주 직면합니다. 이는 사용자가 웹 페이지에서 브라우저의 뒤로 기능을 사용하는 것을 방지하여 웹 페이지의 보안과 안정성을 보호합니다. JavaScript를 사용하여 이 기능을 구현할 때 뒤로 버튼을 사용할 수 없는 상황이 발생할 수 있습니다. 다음으로 이 문제를 해결하는 방법을 설명하겠습니다.

1. 문제의 원인

JavaScript에서 브라우저의 뒤로 버튼을 비활성화하는 것은 일반적으로 브라우저 기록을 조작하여 수행됩니다. 다음 두 가지 방법을 실행하면 뒤로 버튼이 비활성화됩니다.

history.forward()
history.back()

그러나 경우에 따라 이러한 방법으로 뒤로 버튼을 비활성화할 수 없습니다. 일반적으로 이러한 상황은 다음 두 가지 상황에서 발생합니다.

  1. 현재 페이지는 HTTP POST 메서드를 통해 제출된 양식이며, 양식에 많은 양의 데이터가 포함되어 있습니다.
  2. 웹 페이지의 실행 환경에서는 코드가 너무 빨리 실행되어 History.forward() 또는 History.back() 메서드가 실행될 때 브라우저가 이러한 작업에 제때 응답하지 않습니다.

2. Solution

위의 두 가지 상황에 대해 다음과 같은 해결책을 취할 수 있습니다.

  1. URL을 수정하여 뒤로 기능 구현

페이지의 URL에 특정 식별자를 추가하여 뒤로 기능을 구현할 수 있습니다. 사용자가 뒤로 버튼을 클릭하면 창 개체의 popstate 이벤트를 수신하고 사용자가 뒤로 돌아가야 하는지 여부를 결정하기 위해 URL에 이 식별자가 포함되어 있는지 확인하기만 하면 됩니다. 코드는 다음과 같습니다.

window.addEventListener('popstate', function(event) {
    if (event.state && event.state.isBack) {
        // 执行后退操作
    }
});

var state = {
    isBack: true
};

history.pushState(state, '', '#back');

위 코드에서는 먼저 window 객체의 popstate 이벤트를 수신합니다. 이벤트가 트리거되면 event.state 객체에 isBack 필드가 포함되어 있는지 확인합니다. 뒷면 작업. 뒤로 버튼을 비활성화해야 하는 경우, History.pushState() 메서드를 호출하고 비활성화해야 하는 곳에 식별자가 있는 상태 개체를 추가하기만 하면 됩니다.

  1. 창 개체의 onbeforeunload 메서드를 수정하여 다시 실현

창 개체의 onbeforeunload 메서드를 재정의하여 뒤로 버튼을 비활성화할 수도 있습니다. 사용자가 뒤로 버튼을 클릭하면 onbeforeunload 메서드가 재정의되었기 때문에 브라우저는 확인 상자를 팝업으로 표시합니다. 이때 사용자는 확인 상자에서 "이 페이지에 머물기"를 선택해야만 현재 페이지에 머물 수 있습니다. 코드는 다음과 같습니다.

window.onbeforeunload = function() {
    return "是否离开当前页面?";
}

위 코드에서는 창 개체의 onbeforeunload 메서드를 재정의하고 확인 상자를 반환합니다. 사용자가 뒤로 버튼을 클릭하면 브라우저에 확인 상자가 팝업됩니다. 사용자는 "이 페이지에 머물기"를 선택해야만 현재 페이지에 머물 수 있으므로 뒤로 버튼은 무효화됩니다.

요약:

브라우저의 뒤로 버튼을 비활성화하세요. 어떤 경우에는 뒤로 버튼을 사용할 수 없는 문제가 발생할 수 있습니다. URL을 수정하거나 onbeforeunload 메소드를 재정의하여 이 문제를 해결할 수 있습니다. 뒤로 버튼을 비활성화해야 하는 경우 비활성화해야 하는 해당 메서드만 호출하면 됩니다.

위 내용은 JavaScript 뒤로 버튼이 작동하지 않는 문제에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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