js监听浏览器返回、后退、上一页按钮事件方法

这篇博客介绍了如何使用JavaScript监听浏览器的返回按钮事件,通过pushState方法添加历史记录,并在popstate事件触发时执行自定义功能,防止页面实际返回上一页。提供了完整的代码示例,适用于前端开发中的页面导航控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、监听浏览器事件

⼤家知道在页⾯中我们可以使⽤javascript window history,后退到前⾯页⾯,但是由于安全原因javascript不允许修改history
⾥已有的url链接,但可以使⽤pushState⽅法往history⾥增加url链接,并且提供popstate事件监测从history栈⾥弹出url。既然
有提供popstate事件监测,那么我们就可以进⾏监听。
返回、后退、上⼀页按钮点击监听实现代码:

window.addEventListener("popstate", function(e) { 
alert("我监听到了浏览器的返回按钮事件啦");//根据⾃⼰的需求实现⾃⼰的功能
}, false);

二、增加一个url 

虽然我们监听到了后退事件,但是页⾯还是会返回上⼀个页⾯,所以我们需要使⽤pushState增加⼀个本页的url,代表本页,⼤
家都⾮常清楚是#

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

三、完整代码 

当进⼊该页⾯,我们就给这个history压⼊⼀个本地的连接。当点击返回、后退及上⼀页的操作时,就进⾏监听,在监听代码中
实现⾃⼰操作。
下⾯是完整的代码:

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

or 

const popStateHandle = function () {
     //处理逻辑
    }

onMounted(() => {
   window.history.pushState(null, null, '')
   window.addEventListener('popstate', popStateHandle, false)
     })
onUnmounted(() => {
    //销毁
   window.removeEventListener('popstate', popStateHandle)
    })  

在 iframe 中返回一页面时,如果不想刷新上一页面,可以使用以下方法: 1. 使用 history.pushState() 方法 在 iframe 中返回一页面时,可以使用 JavaScript 的 history.pushState() 方法修改浏览器历史记录,从而避免刷新上一页面。例如,你可以在子页面中添加以下代码: ```javascript history.pushState(null, null, document.URL); window.addEventListener('popstate', function () { history.pushState(null, null, document.URL); }); ``` 上述代码会在子页面中执行,它会在浏览器历史记录中添加一个新的状态,并且监听 popstate 事件,当用户点击浏览器后退按钮时,再次调用 pushState() 方法,从而保持历史记录不变。这样就可以实现在 iframe 中返回一页面时不刷新上一页面的效果。 2. 使用 session storage 另一种方法是使用 session storage,在子页面中保存一个标识符,当返回一页面时,检查标识符是否存在,如果存在则不刷新上一页面。例如: 在子页面中添加以下代码: ```javascript sessionStorage.setItem('noRefresh', '1'); ``` 在父页面中添加以下代码: ```javascript window.addEventListener('popstate', function () { var noRefresh = sessionStorage.getItem('noRefresh'); if (noRefresh === '1') { sessionStorage.removeItem('noRefresh'); return; } location.reload(); }); ``` 上述代码会在子页面中设置 sessionStorage,当返回一页面时,父页面会检查 sessionStorage 中是否存在标识符,如果存在则不刷新页面,否则刷新页面。这样就可以实现在 iframe 中返回一页面时不刷新上一页面的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值