Vue PWA离线页面如何动态显示缓存状态?
我正在开发一个Vue PWA应用,想在页面顶部实时显示离线/在线状态。按教程写了service worker但遇到问题:
<template>
<div>
网络状态:{{ isOnline ? '在线' : '离线' }}
</div>
</template>
<script>
export default {
data() {
return {
isOnline: navigator.onLine
}
},
mounted() {
window.addEventListener('online', () => this.isOnline = true)
window.addEventListener('offline', () => this.isOnline = false)
}
}
</script>
虽然能初始显示状态,但切换飞行模式后不会更新。用Chrome应用工具看,service worker确实在运行,但页面状态始终显示在线。试过检查navigator.serviceWorker.registered状态也没用,求大神指点哪里没搞对?
要在Vue里动态显示缓存状态,得通过Service Worker的message事件来通信。首先在你的Service Worker文件里加个状态广播:
然后在Vue组件里监听这个消息事件,更新状态:
这样改完就好了。不过说实话,PWA这块儿的坑确实多,我都踩过好几次。记得测试的时候要清缓存,不然老版本的Service Worker会捣乱。如果想省事,Workbox插件可以帮你简化很多配置,推荐试试。