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

时间: 2018-07-30阅读: 6100标签: 事件

在WebApp或浏览器中,会有点击返回、后退、上一页等按钮实现自己的关闭页面、调整到指定页面、确认离开页面或执行一些其它操作的需求。可以使用 popstate 事件进行监听返回、后退、上一页操作。 


一、简单介绍 history 中的操作

1.window.history.back(),后退

2.window.history.forward(),前进

3.window.history.go(num),前进或后退指定数量历史记录

4.window.history.pushState(state, title, utl),在页面中创建一个 history 实体。直接添加到历史记录中。

参数:state:存储一个对象,可以添加相关信息,可以使用 history.state 读取其中的内容。
   title:历史记录的标题(目前浏览器不支持)。
   url:创建的历史记录的链接。进行历史记录操作时会跳转到该链接。

5.window.history.replaceState(),修改当前的 history 实体。

参数:state:存储一个对象,可以添加相关信息,可以使用 history.state 读取其中的内容。
   title:历史记录的标题(目前浏览器不支持)。
   url:创建的历史记录的链接。进行历史记录操作时会跳转到该链接。

6.popstate 事件,history 实体改变时触发的事件。

7.window.history.state,会获得 history 实体中的 state 对象。


二、使用方法

取消默认的返回操作:

1.添加一条 history 实体作为替代原来的 history 实体 

function pushHistory() {
//    第一个实体
    var state = {
        title: "index",
        url: "https://www.cnblogs.com/smallclown/"
    };
    window.history.pushState(state, "index", location.href);
// 第二个实体
    state = {
        title: "index",
        url: "https://www.cnblogs.com"
    };
    window.history.pushState(state, "index", location.href);
// 第三个实体  不要以为最后的空实体没有用  可以解决上来就执行popstate的问题 相当于炮灰
    tate = {
        title: "index",
        url:""
    };
    window.history.pushState(state, "index", "");
}
// history.pushState(state, title, url);
// history.replaceState(state, title, url); 替换

2.监听 popstate 事件  

function addHandler() {
    pushHistory();
    window.addEventListener("popstate", function(e) {
                location.href = window.history.state.url;
            }
    });
    //或者
    window.onpopstate=function(e){
        location.href = window.history.state.url;
    }
}
addHandler();


PS:  

每次返回都会消耗一个 history 实体,若用户选择取消离开,则需要继续 pushState 一个实体 ;

如果把地址换了一个你想去的地址,就形成了一个简单的网页劫持


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/958

CSS中的pointer-events属性实现点穿效果

具有层级关系的结构中,使用了pointer-events:none 属性将会使当前元素中的事件不会被捕获,从而实现了点穿的效果。而当代码示例中假如top元素具有子元素且显示指定pointer-events属性不为none的时候,top元素注册的事件将会被捕获/冒泡触发

vue.js 事件绑定

(1)使用v-on指令可以添加事件监听,语法:2)参数:$event就是当前触发事件的元素,即使不传$event,在回调函数中也可以使用event这个参数

几种HTML标签伪元素绑定事件的方式

图标却是 ::after 伪元素实现的,在印象中好像不能直接对伪元素进行 dom 操作,可项目中有所有页面都是通过伪元素来展示图标的,将所有页面中图标改成 DOM 元素也不太可行。

javascript的事件有哪些?

JavaScript使我们有能力创建动态页面。事件是可以被JavaScript侦测到的行为。网页中的每个元素都可以产生某些可以触发JavaScript函数的事件。那么,javascript的事件有哪些?本篇文章将给大家来介绍关于javascript中常用的事件。

JS自定义事件

自定义事件,就是自己定义事件类型,自己定义事件处理函数。我们平时操作dom时经常会用到onclick、onmousemove等浏览器特定行为的事件类型。封装is自定义事件基本的构思:

事件委托以及在 angular & vue & react 中的应用

事件委托利用了事件冒泡,只指定一个 event handler,就可以管理某一类型的所有事件。比如 click 事件会一直冒泡到 document 层次,也就是我们可以为整个页面指定一个onclick handler, 而不必给每一个可单击的元素分别添加 event handler

解决移动端页面滚动后不触发touchend事件

在移动端页面进行优化时,一般使用touch事件替代鼠标相关事件,用的较多的是使用touchend事件替代PC端的click和mouseup事件。但是,touchend事件在页面滚动时有个问题。

用js代码触发dom事件的实现方案

前端编写测试用例时,在测试界面上的一些效果时,通常都希望能够模拟一些用户操作,而模拟用户操作最主要的方式就是用代码触发指定事件。通常一些元素上会自带一些触发事件的方法,例如click、focus等

js鼠标事件参数,获取鼠标在网页中的坐标

事件对象 event,JavaScript 将事件event作为参数传递,IE中把 event 事件对象作为全局对象 window 的一个属性,获取鼠标在网页中的坐标 = 鼠标在视窗中的坐标 + 浏览器滚动条坐标

事件循环以及vue.nextTick的应用

本文之所以叫宏任务、宏任务队列、微任务队列、微任务,只是将两者区分开来,一轮事件循环只取一个宏任务,宏任务中的同步代码执行完后,就依次从前往后执行微任务队列中的微任务

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!