我遇到一个奇怪的情况,需要一些帮助-无法找到有关它的任何信息。
因此,我正在尝试使用服务工作者离线缓存网站。我可以在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吗?我写的东西有问题吗?
谢谢。