浏览器监听左上角返回按钮监听事件popstate 不起作用
需求
网站A-页面a.page 转到网站B -页面b.page
在b.page点击浏览器右上角返回让他监听到并且跳转到B网站的b_c.page
做法
在B网站的b.page级啦监听函数
pushHistory();
window.addEventListener("popstate", function(e) {
alert("监听到返回按钮事件啦");
//根据自己的需求实现自己的功能
//window.location.href = b_c.page'
}, false);
function pushHistory() {
var state = {
title: "title",
url: "#"
};
window.history.pushState(state, "title", "#");
问题
监听不起作用
解决方案
1.在B网站加一个空白的页面b_empty.page放入上面的监听代码
2.A网站的a.page跳转到B网站的b_empty.page
3.b_empty.page 自动跳转到b.page
这样在b.page 返回b_empty.page的时候就能监听到了,然后强制跳转到需要的页面
猜测原因
popstate事件监听只能监听到设置监听之后的的路由堆栈
一般只有在通过前面2个方法设置了同一站点的多条历史记录,并在其之间导航(前进或后退)时,才会触发这个事件
补充知识:使用History.back()页面后退刷新或者处理一些其他操作页面
需求:在一个页面操作完返回上一个页面,此时希望上个页面能够处理一些操作
比如 pre为上一个页面,current为当前页面
1.pre需要加监听历史记录点
window.onpopstate=function(){
// 获得存储在该历史记录点的json对象
var json=window.history.state;// 获得的json为null时,不是下一个页面返回
if(json){
//自己的业务操作
}
};
2.跳转current前需要先替换当前历史记录点
var json={time:new Date().getTime()};
window.history.replaceState(json,"",window.location.href+"&t="+new Date().getTime());
window.location.href= current;
3. current返回pre
history.back();