利用popstate事件和window下的history对象处理浏览器跳转问题

引子

之前,偶尔在项目中用过history接口做返回上一页功能,当时是用的history.go(-1),前几天面试中遇到一个控制浏览器跳转的问题时有点懵,特意查了文档记录一下,并且列出一些目前能想到的应用:

popstate事件

文档地址

当活动历史记录条目更改时,将触发popstate事件。如果被激活的历史记录条目是通过对history.pushState()的调用创建的,或者受到对history.replaceState()的调用的影响,popstate事件的state属性包含历史条目的状态对象的副本。

就我目前的认识来看,无论是浏览器的前进还是后退都会触发这个popstate事件,所以只能起到一个监听页面变化的作用。

History 接口

  • 属性
  • History.length 表示历史会话中元素的数目
  • History.scrollRestoration 允许Web应用程序在历史导航上显式地设置默认滚动恢复行为。此属性可以是自动的(auto)或者手动的(manual)。
  • History.state 返回一个表示历史堆栈顶部的状态的值。这是一种可以不必等待popstate 事件而查看状态而的方式。
  • 方法
  • History.back()

    等同于history.go(-1)

  • History.forward()

    等同于historygo(1)

  • History.go()

    这个方法中如果参数超出范围或者不对就不会起效果

  • History.pushState()

    pushState() 带有三个参数:一个状态对象,一个标题(现在被忽略了),以及一个可选的URL地址。下面将对这三个参数进行细致的检查

    function pushHistory() { var state = { title: "title", url: "#" }; window.history.pushState(state, "title", "#xx"); }

    其他方法就不一一列举了,感兴趣的看文档

    监听浏览器返回按钮

    function pushHistory() {
    var state = {
      title: "title",
      url: "#"
    };
    window.history.pushState(state, "title", "#xx");
    }
    pushHistory();
    window.addEventListener("popstate", function(e) {
    console.log(e);
    alert("我监听到了浏览器的返回按钮事件啦");//根据自己的需求实现自己的功能
    }, false);

    这个地方就监听了浏览器的返回事件,但我有个疑问,如果不先pushState一个地址就监听不到,直接跳转了,这个暂时没搞懂,有知道的小伙伴可以留言讨论一下。

    禁止返回上一页的一种方案

    history.pushState(null, null, document.URL);
    window.addEventListener("popstate",function(e) {
    console.log(e);
    history.pushState(null, null, document.URL);
    }, false);

    这个其实就是利用pushState向浏览历史列表中插入当前页面,在点击后退前和点击时都插入一次,那样无论点前进还是后退永远都会留在这个页面了

如果大家还有什么关于利用history接口和popstate结合控制页面跳转的实际应用案例,欢迎留言讨论交流!

原文地址:https://www.cnblogs.com/wancheng7/p/8542544.html

时间: 2024-08-17 07:04:46

利用popstate事件和window下的history对象处理浏览器跳转问题的相关文章

html5之history对象 控制浏览器前进或后退事件

一.摘要: 总结用history对象操作浏览器的历史记录的方法,在项目中使用的是mui框架,总结中包括我在实际项目中遇到的问题. 二.总结: 实现效果: 实现代码: 上面的编辑页面加载的时候就要先调用一次pushHistory()方法,如果不先调用一遍,在第一次点击浏览器上的返回按钮时,不会弹出提示框,必须在你按过一次手机页面上的返回键之后,你点击了提示框上的取消按钮,你再按浏览器上的返回键页面才能弹出提示框. js关键代码:  下面总结history对象的用法: a)历史记录 前进和后退的方法

监听浏览器返回,pushState,popstate 事件,window.history对象

在WebApp或浏览器中,会有点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面.确认离开页面或执行一些其它操作的需求.可以使用 popstate 事件进行监听返回.后退.上一页操作. 一.简单介绍 history 中的操作 1.window.history.back(),后退 2.window.history.forward(),前进 3.window.history.go(num),前进或后退指定数量历史记录 4.window.history.pushState(state, t

BOM之history对象

前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后退和前进.本文将详细介绍BOM中的history对象 length history.length属性保存着历史记录的URL数量.初始时,该值为1.如果当前窗口先后访问了三个网址,history.length属性等于3 由于IE10+浏览器在初始时返回2,存在兼容性问题,所以该值并不常用 histor

BOM之history对象(转)

前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后退和前进.本文将详细介绍BOM中的history对象 length history.length属性保存着历史记录的URL数量.初始时,该值为1.如果当前窗口先后访问了三个网址,history.length属性等于3 由于IE10+浏览器在初始时返回2,存在兼容性问题,所以该值并不常用 histor

javascript History对象详解

length history.length属性保存着历史记录的URL数量.初始时,该值为1.由于IE10+浏览器在初始时返回2,存在兼容性问题,所以该值并不常用 跳转方法 go().back()和forward() 如果移动的位置超出了访问历史的边界,以上三个方法并不报错,而是静默失败 [注意]使用历史记录时,页面通常从浏览器缓存之中加载,而不是重新要求服务器发送新的网页.不触发onload 增改记录 HTML5为history对象添加了两个新方法,history.pushState()和his

BOM 浏览器对象模型_当前窗口的浏览历史 history 对象

当前窗口的浏览历史 window.history 对象 保存了当前窗口访问过的所有页面网址 由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航 history.back() 相当于 history.go(-1) 浏览器工具栏的 “前进” 和 “后退” 按钮,其实就是对 History 对象进行操作 // 当前窗口访问过多少个网页 window.history.length // 1 // History 对象的当前状态 // 通常是 undefined,即未设置 window.h

JS-BOM编程之history对象

History 对象包含用户(在浏览器窗口中)访问过的 URL. History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问. 注释:没有应用于 History 对象的公开标准,不过所有浏览器都支持该对象. history对象代表浏览器窗口上的前进和后退按钮 History 对象最初设计来表示窗口的浏览历史.但出于隐私方面的原因,History 对象不再允许脚本访问已经访问过的实际 URL.唯一保持使用的功能只有 back().forward()

使用history.pushState()和popstate事件实现AJAX的前进、后退功能

上一篇文章中,我们使用location.hash来模拟ajax的前进后退功能.使用location.hash存在下面几个问题: 1.使用location.hash会导致地址栏的url发生变化,用户体验不够友好. 2.location.hash产生的历史记录无法修改,每次hash改变都会导致产生一个新的历史记录. 3.location.hash只是1个字符串,不能存储很多状态相关的信息. 为了解决这些问题,HTML5中引入了history.pushState().history.replaceSt

利用history实现无刷新跳转界面

看标题是不是感觉很拽的样子,其实没什么啦,也就是时下常说的单页面应用.这种web形式在如今的移动端十分流行,毕竟在移动端频繁得去刷新界面不是很友好,而且还费流量.今天我们要做一个小的app(移动端),来揭秘history的秘密.首先我们了解一下核心方法: window.history.pushState:方法:为histroy建立历史记录,该方法传入三个函数:1.对应url的信息2.下一个界面的title 3 .需要你动态改变的地址栏中德url window.history.state:属性:当