vue组件中监听或拦截窗口关闭事件
参考:Window:beforeunload 事件 - MDN
应用场景:
有时我们希望在页面关闭时做些事情,比如更新状态。vue提供的生命周期钩子无法在关闭/刷新浏览器窗口时触发。
解决方案
vue
<script setup>
import { onMounted, onBeforeUnmount } from 'vue'
onMounted(() => {
window.addEventListener('beforeunload', updateStatus)
})
onBeforeUnmount(() => {
window.removeEventListener('beforeunload', updateStatus)
updateStatus()
})
function updateStatus() {
// 执行操作,如更新状态
}
</script>
vue
<script setup>
import { onMounted, onBeforeUnmount } from 'vue'
onMounted(() => {
window.addEventListener('beforeunload', updateStatus)
})
onBeforeUnmount(() => {
window.removeEventListener('beforeunload', updateStatus)
})
function updateStatus($event) {
// 拦截窗口关闭事件
$event.preventDefault()
$event.returnValue = '确定要刷新页面吗?'
return '确定要刷新页面吗?'
}
</script>
Last updated: