diff --git a/page-lifecycle.d.ts b/page-lifecycle.d.ts index 963a4bea..16fe86dd 100644 --- a/page-lifecycle.d.ts +++ b/page-lifecycle.d.ts @@ -1,5 +1,5 @@ declare module 'page-lifecycle/dist/lifecycle.mjs' { - type PageLifecycleState = 'pageshow' | 'resume' | 'focus' | 'blur' | 'pagehide' | 'unload' | 'visibilitychange' | 'freeze' + type PageLifecycleState = 'active' | 'passive' | 'hidden' | 'frozen' | 'terminated' interface PageLifecycleEvent extends Event { newState: PageLifecycleState diff --git a/plugins/page-lifecycle.client.ts b/plugins/page-lifecycle.client.ts index a93c49ee..eade1fdd 100644 --- a/plugins/page-lifecycle.client.ts +++ b/plugins/page-lifecycle.client.ts @@ -5,12 +5,22 @@ import { closeDatabases } from '~/utils/elk-idb' export default defineNuxtPlugin(() => { const state = ref(lifecycle.state) const frozenListeners: (() => void)[] = [] + const frozenState = useLocalStorage(ELK_PAGE_LIFECYCLE_FROZEN, false) lifecycle.addEventListener('statechange', (evt) => { - if (evt.newState === 'freeze') + if (evt.newState === 'hidden' && evt.oldState === 'frozen') { + frozenState.value = false + nextTick().then(() => window.location.reload()) + return + } + + if (evt.newState === 'frozen') { + frozenState.value = true frozenListeners.forEach(listener => listener()) - else + } + else { state.value = evt.newState + } }) const addFrozenListener = (listener: () => void) => {