Vaadin PWA启动强制要求联网问题求助
你遇到的这个情况我太懂了——明明本地WildFly服务器已经跑起来了,完全具备离线运行的条件,结果Vaadin PWA一启动就跳出来要联网,确实挺烦人的。我给你几个实用的排查和解决方向:
把在线依赖改成本地打包
Vaadin默认会从CDN加载一些前端组件资源,这就是离线时出问题的关键。如果是Maven项目,你可以在pom.xml里加上<vaadin.offline>true</vaadin.offline>配置,这样框架会把所有需要的前端资源都打包到你的项目里,彻底不用依赖在线CDN。Gradle项目的话,对应设置vaadin.offline=true就行。自定义Service Worker跳过联网检查
Vaadin自动生成的Service Worker可能自带了联网检测逻辑,你可以自己写个自定义的Service Worker脚本覆盖它。在项目的src/main/resources/META-INF/resources/下新建sw.js文件,写个优先用缓存的fetch策略:self.addEventListener('fetch', (event) => { event.respondWith( caches.match(event.request) .then((response) => { // 不管有没有网,先返回缓存内容,缓存没有再尝试请求(离线时就直接用缓存) return response || fetch(event.request); }) ); });另外别忘了检查
@PWA注解的配置,确保offlinePath这类离线相关参数设置正确,比如指定一个离线时显示的页面。检查Manifest文件里的在线资源
看看自动生成的manifest.json,如果里面有引用在线的图标或者其他资源,赶紧把这些资源下载到本地,替换成项目内的相对路径。比如把图标放到src/main/resources/META-INF/resources/icons目录下,然后修改manifest里的图标路径为/icons/xxx.png这种本地路径。重置浏览器的Service Worker和缓存
之前你改Chrome的worker服务离线没效果,大概率是旧的Service Worker缓存还在搞事情。打开Chrome开发者工具(F12),切换到Application标签,在Service Workers里点击"Unregister",然后清空Storage下的缓存,重启应用后让新的Service Worker重新注册生效。
这些步骤应该能解决你的离线启动问题,你可以一步步试下,先从修改项目配置打包本地资源开始,这个是最关键的。
备注:内容来源于stack exchange,提问作者Dave Mace

