>웹 프론트엔드 >JS 튜토리얼 >잘못된 트리거를 피하면서 웹 브라우저에서 뒤로 버튼 클릭을 정확하게 감지하는 방법은 무엇입니까?

잘못된 트리거를 피하면서 웹 브라우저에서 뒤로 버튼 클릭을 정확하게 감지하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-22 14:43:54783검색

How to Accurately Detect Back Button Clicks in Web Browsers While Avoiding False Triggers?

웹 브라우저에서 뒤로 버튼 클릭 감지: 잘못된 트리거 해결

사용자의 뒤로 버튼 클릭을 감지하려고 할 때 개발자는 종종 window.onbeforeunload 이벤트. 그러나 이 접근 방식에는 한계가 있습니다. 페이지 새로 고침과 같은 다른 작업이 수행될 때도 트리거됩니다.

보다 포괄적인 솔루션은 뒤로 버튼 클릭과 기타 이벤트를 구별하는 것입니다.

History API 사용:

이 접근 방식은 History API(history.pushState 함수)를 지원하는 브라우저를 대상으로 합니다.

<code class="js">window.onload = function () {
  if (typeof history.pushState === "function") {
    history.pushState("jibberish", null, null);
    window.onpopstate = function () {
      history.pushState('newjibberish', null, null);
      // Handle back or forward button clicks here (excluding refresh)
    };
  } else {
    ... // Handle non-History API browsers
  }
}</code>

해시 변경 사용:

History API를 지원하지 않는 브라우저의 경우 해시 변경을 사용하여 대체 솔루션을 구현할 수 있습니다.

<code class="js">window.onload = function () {
  ... // Similar to History API code
} else {
  var ignoreHashChange = true;
  window.onhashchange = function () {
    if (!ignoreHashChange) {
      ignoreHashChange = true;
      window.location.hash = Math.random();
      // Detect back button click here
      // Note: Messes with hash symbol at the end of URL
    } else {
      ignoreHashChange = false;
    }
  };
}</code>

새로 고침 문제 처리:

동안 위의 솔루션은 뒤로 버튼 감지를 해결하지만 페이지 새로 고침을 처리하지 않습니다. 이를 위해 window.onbeforeunload를 계속 사용할 수 있습니다:

<code class="js">window.onbeforeunload = function (e) {
  if (e.preventDefault) {
    e.preventDefault();
    e.returnValue = '';
  }
}</code>

위 내용은 잘못된 트리거를 피하면서 웹 브라우저에서 뒤로 버튼 클릭을 정확하게 감지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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