Service worker 在注册事件完成之前调用service worker安装事件
我已将安装事件附加到服务人员,如下所示。但在注册事件完成之前触发的安装事件。请参阅下面的代码片段和控制台日志 我关心的是如何在注册事件完成之前触发安装事件Service worker 在注册事件完成之前调用service worker安装事件,service-worker,progressive-web-apps,Service Worker,Progressive Web Apps,我已将安装事件附加到服务人员,如下所示。但在注册事件完成之前触发的安装事件。请参阅下面的代码片段和控制台日志 我关心的是如何在注册事件完成之前触发安装事件 if ('serviceWorker' in navigator) { navigator.serviceWorker.register('./service-worker.js',{scope : '/'}).then(function(registration) { // Registration was successful
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('./service-worker.js',{scope : '/'}).then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
}
var cacheName = 'V-1';
var filesToCache = [
'/', '/index.html',
'/css/all.css', '/css/material.min.css',
'/js/all.js', '/js/material.min.js',
'/images/service-worker-1.png','/images/service-worker-2.png','/images/service-worker-3.png',
];
self.addEventListener('install', function(e) {
console.log('[ServiceWorker] Installing');
e.waitUntil(
caches.open(cacheName).then(function(cache) {
console.log('[ServiceWorker] Caching app shell');
return cache
.addAll(filesToCache) //this is atomic in nature i.e. if any of the file fails the entire cache step fails.
.then(() => {console.log('[ServiceWorker] App shell Caching Successful');})
.catch(() => {console.log('[ServiceWorker] App shell Caching Failed');})
})
);
});
navigator.serviceWorker.register()不是事件。它是一个函数,返回一个promise,然后promise将使用与注册相对应的对象进行解析
实际的服务工作者逻辑在不同的线程/进程中执行,服务工作者处理的生命周期事件(如安装
事件)独立于注册服务工作者的网页发生。您在console.log()中看到的是预期的输出
如果要从网页跟踪服务工作者的状态,可以向ServiceWorkerRegistration
对象添加事件侦听器。这里有一个例子
如果您想编写代码,使您的网页等待有一个活动的服务工作人员后再执行某些操作,则可以利用此承诺。navigator.serviceWorker.register()
不是事件。它是一个函数,返回一个promise,然后promise将使用与注册相对应的对象进行解析
实际的服务工作者逻辑在不同的线程/进程中执行,服务工作者处理的生命周期事件(如安装
事件)独立于注册服务工作者的网页发生。您在console.log()中看到的是预期的输出
如果要从网页跟踪服务工作者的状态,可以向ServiceWorkerRegistration
对象添加事件侦听器。这里有一个例子
如果您想编写代码,使您的网页等待有现役服务人员后再采取行动,您可以利用该承诺。您的问题是什么?@abraham我已更新了描述。如何在注册事件完成之前触发安装事件。您有什么问题?@abraham我已经更新了描述。如何在注册事件完成之前触发安装事件。您能否详细解释一下为什么在注册完成之前触发service worker安装事件?我在这里感到困惑。把注册过程想象成一个网页,告诉浏览器“这是我的服务人员JavaScript的位置”。一旦浏览器知道从哪里获取JS,注册就完成了。实际下载和执行软件代码的过程发生在注册之后。navigator.serviceWorker.register()
返回的承诺在软件代码开始执行后的某个时间点解析,但由于我们在这里讨论的是异步多线程代码,确切的时间可能很难确定。感谢您的详细解释:)您能详细解释一下为什么在注册完成之前就触发了service worker安装事件吗?我在这里感到困惑。把注册过程想象成一个网页,告诉浏览器“这是我的服务人员JavaScript的位置”。一旦浏览器知道从哪里获取JS,注册就完成了。实际下载和执行软件代码的过程发生在注册之后。navigator.serviceWorker.register()
返回的承诺在软件代码开始执行后的某个时间点得到解决,但由于我们在这里讨论的是异步多线程代码,因此很难确定确切的时间。感谢您的详细解释:)