您如何确定地检测用户是否在浏览器中按下了后退按钮?
如何使用#URL系统在单页web应用程序中强制使用页面内返回按钮?
为什么浏览器的后退按钮不触发它们自己的事件!?
您如何确定地检测用户是否在浏览器中按下了后退按钮?
如何使用#URL系统在单页web应用程序中强制使用页面内返回按钮?
为什么浏览器的后退按钮不触发它们自己的事件!?
当前回答
浏览器会发出popstate事件,如果你通过你的应用程序调用导航
window.history.pushState({},'','/to')
如果您手动在地址栏中输入地址并单击后退按钮,popstate事件将不会被触发。
如果你用这个简化的功能在应用中导航
const navigate = (to) => {
window.history.pushState({}, ",", to);
};
这样就可以了
const handlePopstate = () => {
console.log("popped");
};
window.addEventListener("popstate", handlePopstate);
其他回答
看到这个:
history.pushState(null, null, location.href);
window.onpopstate = function () {
history.go(1);
};
它工作得很好……
在javascript中,导航类型2意味着浏览器的后退或前进按钮被点击,浏览器实际上是从缓存中获取内容。
if(performance.navigation.type == 2)
{
//Do your code here
}
浏览器会发出popstate事件,如果你通过你的应用程序调用导航
window.history.pushState({},'','/to')
如果您手动在地址栏中输入地址并单击后退按钮,popstate事件将不会被触发。
如果你用这个简化的功能在应用中导航
const navigate = (to) => {
window.history.pushState({}, ",", to);
};
这样就可以了
const handlePopstate = () => {
console.log("popped");
};
window.addEventListener("popstate", handlePopstate);
<input style="display:none" id="__pageLoaded" value=""/>
$(document).ready(function () {
if ($("#__pageLoaded").val() != 1) {
$("#__pageLoaded").val(1);
} else {
shared.isBackLoad = true;
$("#__pageLoaded").val(1);
// Call any function that handles your back event
}
});
上面的代码对我有用。在移动浏览器上,当用户单击后退按钮时,我们希望恢复页面状态与他上次访问时相同。
正在寻找这个问题的解决方案,并根据这里的一些答案和History.pushState()和WindowEventHandlers.onpopstate的MDN Web文档页面,将一个简单的骨架测试html放在一起。
下面的HTML和JavaScript很容易复制、粘贴和测试。
使用后退和前进浏览器按钮,快捷键,添加对URL的更改(这在某些情况下很重要)。
简单到可以向现有代码中添加关键点,并且应该是可扩展的。
<html>
<body>
<div id="p1">Option 1</div>
<div id="p2">Option 2</div>
<div id="p3">Option 3</div>
<div id="p4">Option 4</div>
<div id="c"></div>
<script>
var chg={
set:function(str){
var d=document.getElementById("c");
d.textContent=str;
},
go:function(e){
var s={"p":this.id};
chg.set(s.p);
hstry.add(s);
}
};
var hstry={
add:function(s){
var u=new URL(window.location);
u.searchParams.set("x",s.p);
window.history.pushState(s,"",u);
},
adjust:function(state){
if(state.p){
chg.set(state.p);
}
}
};
window.onpopstate=function(e){
console.log("popstate, e.state:["+ JSON.stringify(e.state) +"]");
hstry.adjust(e.state);
}
window.onload=function(){
var i,d,a=["p1","p2","p3","p4"];
for(i=0;i<a.length;i++){
d=document.getElementById(a[i]);
d.addEventListener("click",chg.go,false);
}
}
</script>
</body>
</html>