찾다
웹 프론트엔드HTML 튜토리얼pushState 및 replacementState 사용 단계에 대한 자세한 설명

이번에는 pushState 및 replacementState 사용 단계에 대해 자세히 설명하겠습니다. pushState 및 replacementState 사용 시 주의사항은 무엇인가요?

1. 소개

HTML5에는 기록 항목을 각각 추가하고 수정할 수 있는 History.pushState() 및 History.replaceState() 메서드가 도입되었습니다. 이러한 메서드는 일반적으로 window.onpopstate와 함께 사용됩니다.

2. pushState() 메소드의 예

다음 JavaScript 코드가 http://mozilla.org/foo.html에서 실행된다고 가정합니다.

var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");

이렇게 하면 브라우저 주소 표시줄이 표시됩니다. http://mozilla.org/bar.html과 같지만 브라우저가 bar.html을 로드하거나 bar.html이 존재하는지 확인하지도 않습니다.

이제 사용자가 http://google.com을 방문하고 뒤로 버튼을 클릭한다고 가정해 보겠습니다. 이때 주소 표시줄에는 http://mozilla.org/bar.html이 표시되고 페이지는 popstate 이벤트를 트리거합니다. 이벤트 객체 상태에는 stateObj의 복사본이 포함됩니다. 페이지 자체는 foo.html과 동일하지만 내용은 popstate 이벤트에서 수정될 수 있습니다.

뒤로 버튼을 다시 클릭하면 페이지 URL이 http://mozilla.org/foo.html로 변경되고 문서 객체 문서가 또 다른 popstate 이벤트를 트리거합니다. 이번에는 이벤트 객체 상태 객체가 null입니다. 여기서도 마찬가지입니다. 반환하면 문서의 내용이 변경되지 않습니다. 비록 문서가 popstate 이벤트를 수신할 때 내용이 변경될 수 있지만 해당 내용은 여전히 ​​이전 프레젠테이션과 일치합니다.

3. pushState() 메서드

pushState()에는 상태 개체, 제목(현재 무시됨) 및 URL(선택 사항) 세 가지 매개 변수 세부 정보가 필요합니다.

State 객체 — 상태 객체 state는 pushState()를 통해 새로운 기록 항목을 생성하는 JavaScript 객체입니다. 사용자가 새 상태로 이동할 때마다 popstate 이벤트가 시작되고 이벤트의 상태 속성에는 기록 항목의 상태 객체 복사본이 포함됩니다.

Title — 이 매개변수는 현재 무시되지만 향후 사용될 수 있습니다. 빈 문자열을 전달하는 것은 여기서는 안전하지만 나중에는 안전하지 않습니다. 또는 점프 상태에 대한 짧은 제목을 전달할 수 있습니다.

URL — 이 매개변수는 새로운 기록 URL 레코드를 정의합니다. 브라우저는 pushState() 호출 직후에 이 URL을 로드하지 않지만 나중에 사용자가 브라우저를 다시 열 때와 같은 특정 상황에서는 이 URL을 로드할 수 있습니다. 새 URL은 절대 경로일 필요는 없습니다. 새 URL이 상대 경로인 경우 현재 URL을 기준으로 상대 경로로 처리됩니다. 새 URL은 현재 URL과 동일한 출처를 가져야 합니다. 그렇지 않으면 pushState()에서 예외가 발생합니다. 이 매개변수는 선택사항이며 기본값은 현재 URL입니다.

4 pushState() 메서드와 해시 값 설정의 차이점

어떤 의미에서 pushState()를 호출하는 것은 window.location = "#foo"를 설정하는 것과 비슷합니다. 둘 다 현재 페이지를 클릭하고 새 기록을 활성화하세요. 그러나 pushState()에는 다음과 같은 장점이 있습니다.

새 URL은 현재 URL과 동일한 출처를 가진 모든 URL이 될 수 있습니다. 그리고 window.location을 설정하면 해시만 수정한 경우에만 동일한 파일이 유지됩니다.

필요한 경우 URL을 변경하지 않고 기록 레코드를 생성할 수 있습니다. window.location = "#foo";를 설정하면 현재 해시가 #foo가 아닌 경우에만 새 기록 항목이 생성됩니다.

모든 데이터를 새로운 기록 항목과 연결할 수 있습니다. 해시 값 기반 방법을 사용하면 모든 관련 데이터를 짧은 문자열로 인코딩해야 합니다.

5. replacementState() 메소드

History.replaceState()의 사용은 History.pushState()와 매우 유사합니다. 차이점은 교체State()가 새 기록 항목을 생성하는 대신 현재 기록 항목을 수정한다는 것입니다. .

6.팝스테이트 이벤트

每当处于激活状态的历史记录条目发生变化时,popstate 事件就会在对应window对象上触发。 如果当前处于激活状态的历史记录条目是由history.pushState()方法创建,或者由history.replaceState()方法修改过的, 则popstate事件对象的state属性包含了这个历史记录条目的state对象的一个拷贝。

我们也可以直接在history对象上获取state,如下:

var currentState = history.state;

需要注意的是,调用 history.pushState() 或者 history.replaceState() 不会触发 popstate 事件。 opstate事件只会在浏览器某些行为下触发, 比如点击后退、前进按钮(或者在JavaScript中调用history.back()、history.forward()、history.go()方法)。

七、popstate 事件的例子

假如当前网页地址为 http://example.com/example.html ,则运行下述代码后:

window.onpopstate = function(event) {
  alert("location: " + document.location + ", state: " + JSON.stringify(event.state));
};
//绑定事件处理函数. 
history.pushState({page: 1}, "title 1", "?page=1");    //添加并激活一个历史记录条目 http://example.com/example.html?page=1,条目索引为1
history.pushState({page: 2}, "title 2", "?page=2");    //添加并激活一个历史记录条目 http://example.com/example.html?page=2,条目索引为2
history.replaceState({page: 3}, "title 3", "?page=3"); //修改当前激活的历史记录条目 http://ex..?page=2 变为 http://ex..?page=3,条目索引为3
history.back(); // 弹出 "location: http://example.com/example.html?page=1, state: {"page":1}"
history.back(); // 弹出 "location: http://example.com/example.html, state: null
history.go(2);  // 弹出 "location: http://example.com/example.html?page=3, state: {"page":3}

八、pushState()的用途

王二使用 pushState() 主要是它可以监听到浏览器上的返回事件,这在移动端上也同样适用,参考如下一段代码(可以直接运行):

    <p>window.onpopstate可以监听到返回键事件</p>
    <script>
        history.pushState({}, ""); 
        window.onpopstate = function(event) {
            //这里可以监听到浏览器的返回事件,并做你想做的事情,
            //例如:跳转到另一个网页
            location.href = "https://www.baidu.com";
        };
    </script>

当然,用 window.onhashchange 也可以监听到浏览器上的返回事件,参考如下一段代码(可以直接运行):

    <p>window.onhashchange可以监听到返回键事件</p>
    <script>
        setTimeout(()=>{
            location.hash="a"
        },100);
        setTimeout(()=>{
            window.onhashchange = function(event) {
                location.href = "https://www.baidu.com";
            }
        },200);
    </script>

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

H5+WebWorkers多线程开发使用详解

CSS3二级导航菜单制作步骤详解

위 내용은 pushState 및 replacementState 사용 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

C++中的众数函数详解在统计学中,众数指的是一组数据中出现次数最多的数值。在C++语言中,我们可以通过编写一个众数函数来找到任意一组数据中的众数。众数函数的实现可以采用多种不同的方法,下面将详细介绍其中两种常用的方法。第一种方法是使用哈希表来统计每个数字出现的次数。首先,我们需要定义一个哈希表,将每个数字作为键,出现次数作为值。然后,对于给定的数据集,我们遍

C++中的取余函数详解C++中的取余函数详解Nov 18, 2023 pm 02:41 PM

C++中的取余函数详解在C++中,取余运算符(%)用于计算两个数相除的余数。它是一种二元运算符,其操作数可以是任何整数类型(包括char、short、int、long等),也可以是浮点数类型(如float、double)。取余运算符返回的结果与被除数的符号相同。例如,对于整数的取余运算,我们可以使用以下代码来实现:inta=10;intb=3;

Vue.nextTick函数用法详解及在异步更新中的应用Vue.nextTick函数用法详解及在异步更新中的应用Jul 26, 2023 am 08:57 AM

Vue.nextTick函数用法详解及在异步更新中的应用在Vue开发中,经常会遇到需要进行异步更新数据的情况,比如在修改DOM后需要立即更新数据或者在数据更新后需要立即进行相关操作。而Vue提供的.nextTick函数就是为了解决这类问题而出现的。本文就会详细介绍Vue.nextTick函数的用法,并结合代码示例来说明它在异步更新中的应用。一、Vue.nex

Django框架中的缓存机制详解Django框架中的缓存机制详解Jun 18, 2023 pm 01:14 PM

在Web应用程序中,缓存通常是用来优化性能的重要手段。Django作为一款著名的Web框架,自然也提供了完善的缓存机制来帮助开发者进一步提高应用程序的性能。本文将对Django框架中的缓存机制进行详解,包括缓存的使用场景、建议的缓存策略、缓存的实现方式和使用方法等方面。希望对Django开发者或对缓存机制感兴趣的读者有所帮助。一、缓存的使用场景缓存的使用场景

php-fpm调优方法详解php-fpm调优方法详解Jul 08, 2023 pm 04:31 PM

PHP-FPM是一种常用的PHP进程管理器,用于提供更好的PHP性能和稳定性。然而,在高负载环境下,PHP-FPM的默认配置可能无法满足需求,因此我们需要对其进行调优。本文将详细介绍PHP-FPM的调优方法,并给出一些代码示例。一、增加进程数默认情况下,PHP-FPM只启动少量的进程来处理请求。在高负载环境下,我们可以通过增加进程数来提高PHP-FPM的并发

PHP function_exists()函数用法详解PHP function_exists()函数用法详解Jun 27, 2023 am 10:32 AM

在PHP开发中,有时我们需要判断某个函数是否可用,这时我们便可以使用function_exists()函数。本文将详细介绍function_exists()函数的用法。一、什么是function_exists()函数?function_exists()函数是PHP自带的一个内置函数,用于判断某个函数是否被定义。该函数返回一个布尔值,如果函数存在返回True,

Gin框架的模板渲染功能详解Gin框架的模板渲染功能详解Jun 22, 2023 pm 10:37 PM

Gin框架是目前非常流行的Go语言Web框架之一。作为一个轻量级的框架,Gin提供了丰富的功能和灵活的架构,使得它在Web开发领域中备受欢迎。其中一个特别重要的功能是模板渲染。在本文中,我们将介绍Gin框架的模板渲染功能,并深入了解它的实现原理。一、Gin框架的模板渲染功能Gin框架使用了多种模板渲染引擎来构建Web应用程序。目前,它支持以下几种模板引擎:

PHP中的ORM框架使用详解PHP中的ORM框架使用详解Jun 23, 2023 am 11:22 AM

ORM(Object-RelationalMapping)框架是一种用于将面向对象编程语言中的对象模型与关系型数据库之间映射的技术。它使开发人员能够使用面向对象的方式操作数据库,而不需要直接操作SQL语言。在PHP开发领域中,ORM框架也得到了广泛的应用。本文将详细介绍PHP中的ORM框架使用方法。一、ORM框架的优点使用ORM框架有以下优点:1.提高开发

See all articles

핫 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를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구