鸿蒙的系统浏览器, pwa 网页一直使用 sw 中的静态资源,即使 unregister 了所有的 sw 也无法去除缓存, ios 和 android 都可以,除了鸿蒙,我要怎么办?

143 天前
 wyl986

我有一个 PWA 网页,更新了之后,鸿蒙系统的自带浏览器一直不加载最新的代码

  1. 最开始我在 service-worker.js 中使用 skipWaitingcaches.delete 来手动控制缓存,这是我最开始在 service-worker.js 中就有的代码,我使用 service-worker 主要是为了可以在网页离线的时候推送通知

    // 处理缓存
    // 添加 install 和 activate 事件处理,确保不使用缓存
    self.addEventListener('install', () => {
        self.skipWaiting();
    });
    
    self.addEventListener('activate', (event) => {
        event.waitUntil(
            caches.keys().then((cacheNames) => {
                return Promise.all(
                    cacheNames.map((cacheName) => {
                        // 删除所有缓存
                        return caches.delete(cacheName);
                    }),
                );
            }),
        );
        self.clients.claim();
    });
    

    除了鸿蒙以外的设备都是可以正常加载新代码的

    我这边的测试设备是

    • iPhone 13mini ios 18.3.2 + Safari
    • Xperia 1 vi Android 15.0.0_r3 + Chrome 134.0.6998.135
    • win 11 + Chrome 134.0.6998.118
  2. 于是我将 service-worker.js 的内容替换为

    self.registration.unregister();
    

    并在 src/index.ts 中添加了

    if ('serviceWorker' in navigator) {
        navigator.serviceWorker.getRegistrations().then((registrations) => {
            for (const registration of registrations) {
                registration.unregister();
            }
        });
    }
    

    并在 nginx 中添加了响应头

    add_header Cache-Control "no-cache";
    

    鸿蒙中仍然是加载的 sw 中缓存的静态资源( js/css)


鸿蒙自带浏览器只有在无痕模式下打开网页才能加载最新的代码

残血鸿蒙和满血鸿蒙都有这个问题,试了 5 台鸿蒙设备

甚至于在浏览器中手动清除网页缓存后仍然是加载的 sw 中的缓存


请问现在有什么办法可以去掉鸿蒙的缓存呢?

我现在想的办法是开一个新的子域名,把老的重定向过去,这样肯定就没缓存了,但是微信开放平台中的那配置都需要重新填

1816 次点击
所在节点    浏览器
3 条回复
SergeGao
142 天前
找华为官方的技术人员吧
MacsedProtoss
142 天前
放弃鸿蒙用户呗 才多少百分比而已
wyl986
142 天前
@MacsedProtoss 没办法,老板用的华为全家桶

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1121299

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX