Service Worker“安装”不适用于iOS,但适用于Android

时间:2019-01-31 00:20:04

标签: android ios caching install service-worker

我遇到一个奇怪的情况,需要一些帮助-无法找到有关它的任何信息。

因此,我正在尝试使用服务工作者离线缓存网站。我可以在Windows桌面和Android Chrome上运行。但是,在iOS iPhone 12.1.2上它不起作用。 我已经调试了iPhone,并且能够看到控制台。 显然没有错误,服务人员正在注册。 参见下面的代码:

JS

if ('serviceWorker' in navigator) {
    console.log('Service Worker supported')
    window.addEventListener('load', function(){
        navigator.serviceWorker
            .register('../sw_cache.js')
            .then(function(reg){
                console.log('Service Worker: Registered')
            })
            .catch(function(err){
                console.log('Service Worker: Error '+err)
            })
    })
}

所有似乎正常的工作,我可以在iOS调试中看到控制台日志。但是由于某些原因,sw_cache.js文件没有响应。我尝试在其中放置控制台日志,甚至尝试捕获。

在这里查看我的安装事件:

sw_cache.js

var cacheName = 'v1';

var cacheAssets = [... list of assets ... ]

self.addEventListener('install', function(e){
    console.log('Service Worker: Installed');
    e.waitUntil(
        caches
            .open(cacheName)
            .then(function(cache){
                console.log('Service Worker: Caching Files');
                cache.addAll(cacheAssets)
            })
            .then(function(){
                self.skipWaiting();
            })
    )
})

// Call Activate Event
self.addEventListener('activate', function(e){
    console.log('Service Worker: Activated');
    // Remove unwanted caches
    e.waitUntil(
        caches.keys().then(function(cacheNames){
            return Promise.all(
                cacheNames.map(function(cache){
                    if (cache !== cacheName){
                        console.log('Service Worker: Clearing Old Cache');
                        return caches.delete(cache);
                    }
                })
            )
        })
    );
})

// Call Fetch Event
self.addEventListener('fetch', function(event) {
  event.respondWith(caches.match(event.request));
});

Screenshot - Proof of service worker registering on iOS

文件夹结构: Example of my folder structure here 我所有的路径都是相对的(如果这与什么有关系?)

有人知道为什么它适用于Android而不适用于iOS吗?我写的东西有问题吗?

谢谢。

0 个答案:

没有答案