웹 프론트엔드 JS 튜토리얼 Node.js는 반환을 클릭하여 지정된 페이지 구현 process_javascript 기술로 이동합니다.

Node.js는 반환을 클릭하여 지정된 페이지 구현 process_javascript 기술로 이동합니다.

May 16, 2016 pm 03:04 PM

이 기능은 이전에 간략하게 소개한 적이 있습니다. (html5의 새로운 API를 사용하기 때문에 호환성 문제가 있습니다. 모바일 단말기에서는 이 방법을 사용하는 것이 좋습니다.)

기능 설명:

브라우저에서 새 탭을 만들고 URL을 지정하세요. 웹페이지가 로드된 후에는 일반적인 절차에서는 뒤로 클릭이 허용되지 않습니다. 현재 탭 페이지에 해당 기록 기록이 없기 때문에 반환할 기록이 없습니다.

이 경우 고객의 요청에 따라 내역 기록에 링크(홈페이지 등)를 추가해야 새로 열린 페이지에서 돌아가기를 클릭하면 홈 페이지로 이동할 수 있습니다. 사용자는 시스템의 다양한 기능, 프로모션 플랫폼을 볼 수 있습니다.

1. 지식의 핵심

HTML5에는 기록 항목을 하나씩 추가하고 수정할 수 있는 History.pushState() 메서드와 History.replaceState() 메서드가 도입되었습니다. 이러한 메서드는 window.onpopstate 이벤트와 함께 작동합니다.

사례:
http://mozilla.org/foo.html이 다음 JavaScript 코드를 실행한다고 가정합니다.

코드 복사 코드는 다음과 같습니다.
var stateObj = { foo: "bar" }; .pushState( stateObj, "page 2", "bar.html");

이렇게 하면 브라우저의 주소 표시줄에 http://mozilla.org/bar.html이 표시되지만 bar.html 페이지나 확인 표시줄은 로드되지 않습니다. 존재합니다.

이제 사용자가 http://google.com으로 이동한 다음 뒤로 버튼을 클릭한다고 가정해 보겠습니다. 이때 주소 표시줄에 http: //mozilla.org/bar.html, 페이지는 popstate 이벤트를 트리거합니다. 이 이벤트의 상태 개체에는 stateObj의 복사본이 포함되어 있습니다. 페이지 내용은 popstate 이벤트에서 수정되었을 수 있지만 페이지는 foo.html처럼 보입니다.

뒤로 버튼을 다시 클릭하면 URL이

http://mozilla.org/foo.html로 다시 변경됩니다. 이번에는 문서가 또 다른 popstate 이벤트를 트리거합니다. 상태 개체의 경우 null입니다. 롤백해도 문서 내용은 변경되지 않습니다.

pushState() 메서드 pushState()는 상태 객체, 제목(현재는 무시됨), 선택적 URL이라는 세 가지 매개 변수를 사용합니다. 세 가지 매개변수의 세부정보를 개별적으로 살펴보겠습니다.

상태 객체 — pushState() 메서드로 생성된 새 기록 항목과 연결된 JavaScript 객체입니다. 사용자가 새로 생성된 상태로 이동할 때마다 popstate 이벤트가 시작되고 이벤트 객체의 상태 속성에는 기록 항목의 상태 객체 복사본이 포함됩니다.

직렬화 가능한 모든 객체는 상태 객체로 사용될 수 있습니다. FireFox 브라우저는 사용자가 브라우저를 다시 시작한 후 복원할 수 있도록 상태 개체를 사용자의 하드 드라이브에 저장하기 때문에 상태 개체의 크기를 640k로 제한합니다. 이 제한을 초과하는 상태 객체를 pushState() 메서드에 전달하면 해당 메서드에서 예외가 발생합니다. 많은 양의 데이터를 저장해야 한다면 sessionStorage나 localStorage를 사용하는 것이 좋습니다.

title — FireFox는 현재 이 매개변수를 무시하지만 나중에 사용될 수도 있습니다. 이 메소드는 향후 수정될 수 있다는 점을 고려하면 빈 문자열을 전달하는 것이 더 안전합니다. 또는 진입하려는 상태를 나타내는 짧은 제목을 전달할 수도 있습니다.

주소(URL) — 새 기록 항목의 주소입니다. 브라우저는 pushState() 메서드를 호출한 후에 주소를 로드하지 않지만, 사용자가 브라우저를 다시 시작할 때와 같이 나중에 주소 로드를 시도할 수 있습니다. 새 URL은 절대 경로일 필요는 없습니다. 상대 경로인 경우 현재 URL을 기반으로 하며 현재 URL은 동일한 출처를 가져야 합니다. 그렇지 않으면 pushState()에서 예외가 발생합니다. . 이 매개변수는 선택사항입니다. 지정하지 않으면 문서의 현재 URL이 됩니다.

참고: Gecko 2.0(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)에서 Gecko 5.0(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)까지 수신 개체는 JSON을 사용하여 직렬화됩니다. Gecko 6.0(Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)부터 개체는 구조적 복사 알고리즘을 사용하여 직렬화됩니다. 이렇게 하면 더 많은 유형의 객체를 안전하게 전달할 수 있습니다.

어떤 의미에서 pushState()를 호출하는 것은 현재 문서 내에서 새 기록 항목을 만들고 활성화한다는 점에서 window.location='#foo'를 설정하는 것과 유사합니다. 하지만 pushState()에는 다음과 같은 장점이 있습니다.

1. 새 URL은 동일한 원본 URL일 수 있습니다. 반대로 window.location 메서드를 사용하는 경우 해시만 수정하면 동일한 문서에 유지됩니다.

2. 개인의 필요에 따라 URL 수정 여부를 결정합니다. 대신, window.location='#foo'를 설정하면 현재 해시 값이 foo가 아닌 경우에만 새 기록 레코드가 생성됩니다.

3. 새로운 기록 항목에 추상 데이터를 추가할 수 있습니다. 해시 기반 방법을 사용하는 경우 관련 데이터를 매우 짧은 문자열로만 트랜스코딩할 수 있습니다.

pushState() 메서드는 새 주소가 해시만 변경하는 경우에도 hashchange 이벤트를 트리거하지 않습니다.

팝스테이트 이벤트 활성화된 기록이 변경될 때마다 popstate 이벤트가 시작됩니다. 활성화된 기록 항목이 pushState에 의해 생성되었거나 replacementState 메서드에 의해 영향을 받은 경우 popstate 이벤트의 상태 속성에는 기록의 상태 객체 복사본이 포함됩니다.

replaceState() 메서드 History.replaceState() 작업은 교체 상태() 메서드가 새 항목을 생성하는 대신 현재 기록 항목을 수정한다는 점을 제외하면 History.pushState()와 유사합니다.

replaceState() 메서드를 사용하는 것은 일부 사용자 작업에 대한 응답으로 현재 기록 항목의 상태 객체나 URL을 업데이트하려는 경우에 특히 적합합니다.

2. 구현 아이디어 1. popstate 이벤트를 사용하여 클릭 반환 이벤트를 모니터링합니다.

2. 이벤트가 발생하면 현재 페이지의 기록에 반환 가능한 페이지가 있는지 확인합니다.

3. 돌아갈 페이지가 없으면 두 개의 레코드를 삽입합니다.

1) 점프페이지 지정.

2), 빈 기록. (현재 페이지를 변경하지 않고 유지)

3. 구현방법

 //返回之前没页面则返回首页
    function pushHistory() {
      if (history.length < 2) {
        var state = {
          title: "index",
          url: getHttpPrefix + "index.html"
        };
        window.history.pushState(state, "index", location.href);
        state = {
          title: "index",
          url: ""
        };
        window.history.pushState(state, "index", "");
      }
      //lll("history.state" + history.state)
      //console.log(history.state) 
}
로그인 후 복사

페이지가 로드되면 브라우저가 자동으로 레코드를 푸시하므로 현재 기록의 레코드 수를 결정합니다. 그래서 길이가 2보다 작은지 판단해야 합니다.

삽입된 상태 개체는 해당 URL 링크를 얻기 위한 것입니다.
참고:
첫 번째 pushState에서는 점프 작업을 용이하게 하기 위해 점프 URL을 상태 개체에 넣었습니다. 두 번째 매개변수는 현재 브라우저가 기본적으로 이 매개변수를 지원하지 않기 때문에 실질적인 의미가 없습니다.
세 번째 매개변수는 현재 주소 표시줄의 링크를 대체하지만 페이지는 이동하지 않습니다. (이전에 실수로 세 번째 매개변수를 홈페이지 링크로 설정했는데, 이로 인해 주소 표시줄이 홈페이지 링크로 변경되어 현재 페이지의 링크가 홈페이지를 기준으로 점프하여 페이지의 모든 링크가 점프가 잘못되었습니다 )

  setTimeout(function () {
      pushHistory()
      window.addEventListener("popstate", function (e) {
        lll("popstate"+window.history.state)
        if (window.history.state != null && window.history.state.url != "") {
          location.href = window.history.state.url
        }
      });
    }, 300);
로그인 후 복사

이 코드는 페이지의 Ready 이벤트에 배치되어 실행됩니다. 300ms의 지연은 작업을 지연시키고 시스템 팝 이벤트와의 충돌을 방지하기 위한 것입니다.
if 문은 히스토리에 상태 개체가 있는지 확인하는 것인데, 우리의 요구 사항을 충족하는 레코드만 우리가 추가한 상태 개체를 가지게 되므로 이를 기준으로 페이지 점프 작업을 수행할 수 있습니다.
이렇게 하면 우리가 원하는 효과를 얻을 수 있습니다.
4. 마지막에 작성하세요
단점:
1. 물론, 서두에서 언급했듯이. HTML5를 지원하는 브라우저에만 적합합니다.
2. 위챗 등 모바일 단말기의 복귀와 마찬가지로 두 개의 기록이 삽입되기 때문에 페이지를 실행하고 위챗 채팅창으로 돌아가려면 복귀를 두 번 더 클릭해야 하는데, 이는 사용자 경험이 좋지 않습니다.

요약:
이 방법은 확실히 최적화되고 완성될 수 있지만, 현재로서는 그것을 완성하기에는 내 힘이 부족합니다.

이 기사를 읽는 친구들이 영감을 얻거나 영감을 얻기 위한 더 나은 방법을 찾을 수 있기를 바랍니다.

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

내 자신의 JavaScript 라이브러리를 어떻게 작성하고 게시합니까? 내 자신의 JavaScript 라이브러리를 어떻게 작성하고 게시합니까? Mar 18, 2025 pm 03:12 PM

기사는 JavaScript 라이브러리 작성, 게시 및 유지 관리, 계획, 개발, 테스트, 문서 및 홍보 전략에 중점을 둡니다.

브라우저에서 성능을 위해 JavaScript 코드를 최적화하려면 어떻게해야합니까? 브라우저에서 성능을 위해 JavaScript 코드를 최적화하려면 어떻게해야합니까? Mar 18, 2025 pm 03:14 PM

이 기사는 브라우저에서 JavaScript 성능을 최적화하기위한 전략에 대해 설명하고 실행 시간을 줄이고 페이지로드 속도에 미치는 영향을 최소화하는 데 중점을 둡니다.

프론트 엔드 열 용지 영수증에 대한 차량 코드 인쇄를 만나면 어떻게해야합니까? 프론트 엔드 열 용지 영수증에 대한 차량 코드 인쇄를 만나면 어떻게해야합니까? Apr 04, 2025 pm 02:42 PM

프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

브라우저 개발자 도구를 사용하여 JavaScript 코드를 효과적으로 디버그하려면 어떻게해야합니까? 브라우저 개발자 도구를 사용하여 JavaScript 코드를 효과적으로 디버그하려면 어떻게해야합니까? Mar 18, 2025 pm 03:16 PM

이 기사는 브라우저 개발자 도구를 사용하여 효과적인 JavaScript 디버깅, 중단 점 설정, 콘솔 사용 및 성능 분석에 중점을 둡니다.

누가 더 많은 파이썬이나 자바 스크립트를 지불합니까? 누가 더 많은 파이썬이나 자바 스크립트를 지불합니까? Apr 04, 2025 am 12:09 AM

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

소스 맵을 사용하여 조정 된 JavaScript 코드를 디버그하는 방법은 무엇입니까? 소스 맵을 사용하여 조정 된 JavaScript 코드를 디버그하는 방법은 무엇입니까? Mar 18, 2025 pm 03:17 PM

이 기사는 소스 맵을 사용하여 원래 코드에 다시 매핑하여 미니어링 된 JavaScript를 디버그하는 방법을 설명합니다. 소스 맵 활성화, 브레이크 포인트 설정 및 Chrome Devtools 및 Webpack과 같은 도구 사용에 대해 설명합니다.

Console.log 출력 결과의 차이 : 두 통화가 다른 이유는 무엇입니까? Console.log 출력 결과의 차이 : 두 통화가 다른 이유는 무엇입니까? Apr 04, 2025 pm 05:12 PM

Console.log 출력의 차이의 근본 원인에 대한 심층적 인 논의. 이 기사에서는 Console.log 함수의 출력 결과의 차이점을 코드에서 분석하고 그에 따른 이유를 설명합니다. � ...

초보자를위한 타이프 스크립트, 2 부 : 기본 데이터 유형 초보자를위한 타이프 스크립트, 2 부 : 기본 데이터 유형 Mar 19, 2025 am 09:10 AM

엔트리 레벨 타입 스크립트 자습서를 마스터 한 후에는 TypeScript를 지원하고 JavaScript로 컴파일하는 IDE에서 자신의 코드를 작성할 수 있어야합니다. 이 튜토리얼은 TypeScript의 다양한 데이터 유형으로 뛰어납니다. JavaScript에는 NULL, UNDEFINED, BOOLEAN, 번호, 문자열, 기호 (ES6에 의해 소개 됨) 및 객체의 7 가지 데이터 유형이 있습니다. TypeScript는이 기반으로 더 많은 유형을 정의 하며이 튜토리얼은이 모든 튜토리얼을 자세히 다룹니다. 널 데이터 유형 JavaScript와 마찬가지로 Null in TypeScript

See all articles