fix: handle frozen page lifecycle state (#1658)
This commit is contained in:
parent
f7a8d471a6
commit
32cfe6371f
10 changed files with 134 additions and 3 deletions
37
plugins/page-lifecycle.client.ts
Normal file
37
plugins/page-lifecycle.client.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import lifecycle from 'page-lifecycle/dist/lifecycle.mjs'
|
||||
import { ELK_PAGE_LIFECYCLE_FROZEN } from '~/constants'
|
||||
import { closeDatabases } from '~/utils/elk-idb'
|
||||
|
||||
export default defineNuxtPlugin(() => {
|
||||
const state = ref(lifecycle.state)
|
||||
const frozenListeners: (() => void)[] = []
|
||||
|
||||
lifecycle.addEventListener('statechange', (evt) => {
|
||||
if (evt.newState === 'freeze')
|
||||
frozenListeners.forEach(listener => listener())
|
||||
else
|
||||
state.value = evt.newState
|
||||
})
|
||||
|
||||
const addFrozenListener = (listener: () => void) => {
|
||||
frozenListeners.push(listener)
|
||||
}
|
||||
|
||||
if (useAppConfig().pwaEnabled) {
|
||||
addFrozenListener(() => {
|
||||
if (navigator.serviceWorker.controller)
|
||||
navigator.serviceWorker.controller.postMessage(ELK_PAGE_LIFECYCLE_FROZEN)
|
||||
|
||||
closeDatabases()
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
provide: {
|
||||
pageLifecycle: reactive({
|
||||
state,
|
||||
addFrozenListener,
|
||||
}),
|
||||
},
|
||||
}
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue