【发布时间】:2018-10-02 03:50:39
【问题描述】:
这是我第一个使用 laravel 的 PWA 应用。这段代码可以正常工作,它注册得很好,但是如果我对代码进行更改,例如在 HTML 中,它没有得到更新,控制台也没有抛出错误,我不知道为什么。
我正在使用此代码调用 service-worker.js
if ('serviceWorker' in navigator ) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}, function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
这是 sw.js 的代码
var cache_name = 'SW_CACHE';
var urlsToCache = [
'/',
'/register'
];
self.addEventListener('install', function(event) {
event.waitUntil(precache());
});
addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
// Cache hit - return response
if (response) {
return response;
}
var fetchRequest = event.request.clone();
return fetch(fetchRequest).then(
function(response) {
// Check if we received a valid response
if(!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
var responseToCache = response.clone();
caches.open(cache_name)
.then(function(cache) {
cache.put(event.request, responseToCache);
});
return response;
}
);
})
);
});
var fromCache = function (request) {
return caches.open(cache_name).then(function (cache) {
cache.match(request).then(function (matching) {
return matching || Promise.resolve('no-match');
});
});
}
var update = function (request) {
return caches.open(cache_name).then(function (cache) {
return fetch(request).then(function (response) {
return cache.put(request, response);
});
});
}
var precache = function() {
return caches.open(cache_name).then(function (cache) {
return cache.addAll(urlsToCache);
});
}
Y 也使用了 skipWaiting();方法内部安装方法,但它使我的应用程序崩溃并且必须从 chrome://serviceworker-internals/ 卸载 sw
【问题讨论】:
-
在你打开应用程序一点点关闭应用程序然后再次打开后它是否得到更新?我相信这就是它的工作原理。应用程序打开时使用缓存,同时在后台上传更改以供下次打开时使用。
标签: javascript laravel service-worker