A页面跳转至B页面,B页面未刷新,点击浏览器的返回按钮,B页面触发unload事件
A页面跳转至B页面,此时刷新B页面,点击浏览器的返回按钮,B页面不会触发unload事件
因为B页面是一个websocket页面,我希望B页面刷新后,点击浏览器的返回按钮,在B页面的unload事件中断开websocket,但事实上并没有触发到Unload事件,请问有什么好的解决方法吗?
是因为浏览器的BF Cache问题吗?
A页面跳转至B页面,B页面未刷新,点击浏览器的返回按钮,B页面触发unload事件
A页面跳转至B页面,此时刷新B页面,点击浏览器的返回按钮,B页面不会触发unload事件
因为B页面是一个websocket页面,我希望B页面刷新后,点击浏览器的返回按钮,在B页面的unload事件中断开websocket,但事实上并没有触发到Unload事件,请问有什么好的解决方法吗?
是因为浏览器的BF Cache问题吗?
SevLen (作者)
A页面
<template>
<view class="">
这是AAAA
<u-button @click="goB">去往B</u-button>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
goB() {
uni.navigateTo({
url: '/ModuleCenter/test/B'
});
}
}
}
</script>
B页面
<template>
<view class="">
这是BBBBB
</view>
</template>
<script>
export default {
onLoad() {
console.log('B onLoad')
},
onUnload() {
// 刷新B页面后 点击浏览器的后退按钮 是不会触发的
console.log('B onUnload')
},
}
</script>
是的,当用户在B页面刷新后,B页面的unload事件不会被触发。这是因为刷新页面时,浏览器会重新加载页面并替换当前的浏览历史记录条目,这会导致浏览器不会将B页面视为历史记录的一部分。
因此,当用户在B页面刷新后,浏览器会将B页面的URL替换为新的URL,并且B页面的unload事件不会被触发。当用户点击浏览器的返回按钮时,浏览器会从历史记录中加载前一个页面,并且不会重新加载B页面
具体请参考:
https://www.cnblogs.com/mo3408/p/17285879.html
回复 SevLen: 要注销B页面的事件,可以在页面卸载时使用unload事件将事件处理程序从元素中删除。例如:
javascript
window.addEventListener('unload', function() {
// 删除事件处理程序
document.getElementById('myButton').removeEventListener('click', myButtonClickHandler);
});
在上面的示例中,当B页面卸载时,将删除ID为“myButton”的元素的click事件的事件处理程序“myButtonClickHandler”。您可以根据需要更改元素ID和事件处理程序名称。
2023-04-04 11:49
SevLen (作者)
麻烦看下下面的代码 确认你触发的时机
是刷新B页面后 点击浏览器的后退按钮 unload不会触发
如果是A->B 不刷新B 返回A unload才会触发
2023-04-04 09:19
DCloud_UNI_WZF
回复 h***@163.com: 是按你的描述操作,未复现,如确认框架问题,私信提供下远程方式看下
2023-04-04 09:46