我试图从下面的链接看到demo of offline status并且我得到DOMException:超出了配额。
https://serviceworke.rs/offline-status_demo.html
此错误仅在chrome中发生。它在Firefox中运行良好,没有错误在firefox中。
错误发生在服务工作者的install事件中。 下面发布的服务工作者代码供参考。
// /serviceworker-cookbook/offline-status/
var CACHE_NAME = 'dependencies-cache';
// Files required to make this app work offline
var REQUIRED_FILES = [
'random-1.png',
'random-2.png',
'random-3.png',
'random-4.png',
'random-5.png',
'random-6.png',
'style.css',
'index.html',
'index.js',
'app.js'
];
self.addEventListener('install', function(event) {
// Perform install step: loading each required file into cache
event.waitUntil( // Error occurs here... Why???
caches.open(CACHE_NAME)
.then(function(cache) {
// Add all offline dependencies to the cache
console.log('[install] Caches opened, adding all core components' +
'to cache');
return cache.addAll(REQUIRED_FILES);
})
.then(function() {
console.log('[install] All required resources have been cached, ' +
'we\'re good!');
return self.skipWaiting();
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
// Cache hit - return the response from the cached version
if (response) {
console.log(
'[fetch] Returning from ServiceWorker cache: ',
event.request.url
);
return response;
}
// Not in cache - return the result from the live server
// `fetch` is essentially a "fallback"
console.log('[fetch] Returning from server: ', event.request.url);
return fetch(event.request);
}
)
);
});
self.addEventListener('activate', function(event) {
console.log('[activate] Activating ServiceWorker!');
// Calling claim() to force a "controllerchange" event on navigator.serviceWorker
console.log('[activate] Claiming this ServiceWorker!');
event.waitUntil(self.clients.claim());
});

如何纠正此错误?有没有办法增加chrome中的配额限制?
EDIT1:
此link表示Chrome会检查每个来源的配额限制,而firefox会有无限制的配额。
有没有办法删除从原点缓存的所有文件(重置为原始状态)?
答案 0 :(得分:4)
offline-status_demo仅下载700kb,因此不能超过5MB Chrome配额限制。除非Chrome缓存已满,否则如果太多打开标签就会出现这种情况。
答案:在隐身模式下再试一次。
答案 1 :(得分:1)
我认为没有办法增加配额限制。您只需缓存较少的文件,或者使用更好的压缩。
答案 2 :(得分:1)
我可以根据您的代码考虑的解决方案,您可以为您的缓存名称提供版本,然后当您不想要旧资产时,您可以删除整个缓存并保留新缓存。例如:
self.addEventListener('activate', function(event) {
var cacheWhitelist = ['dependencies-cache-**v1**', 'dependencies-2-cache-**v1**'];// Version for your cache list
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.map(function(cacheName) {
if (cacheWhitelist.indexOf(cacheName) === -1) {
return caches.delete(cacheName);
}
})
);
})
);
});
我希望这就是你要找的东西。