2017-06-05 73 views
3

我正在阅读ServiceWorker入门文档https://developers.google.com/web/fundamentals/getting-started/primers/service-workers了解ServiceWorker注册

所以首先我们注册我们的ServiceWorker的范围。所以我做了如下

<!DOCTYPE html> 
<html> 
<head> 
    <title>Getting started with Service Worker</title> 
</head> 
<body> 

<script type="text/javascript"> 

if ('serviceWorker' in navigator) { 
    window.addEventListener('load', function() { 
    navigator.serviceWorker.register('/sw.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); 
    }); 
    }); 
}  

</script> 

</body> 
</html> 

,并创建了一个sw.js文件,并写了一个内部的console.log sw.js

console.log("This is sw.js") 

所以,当我访问index.html文件中的第一次,该console.log被执行并且ServiceWorker注册成功消息被打印。但是,当我第二次刷新页面时,它仅打印成功的ServiceWorker注册消息。那么为什么它没有第二次在sw.js中执行console.log。我期待它第二次执行console.log。我在这里错过了点吗?

+0

只是FWIW,有时人们得到[在职职工(https://www.w3.org/ TR/service-workers-1 /)和通用[web工作者](https://www.w3.org/TR/workers/)混淆。你确定你想要一个服务工作者为你做什么?服务工作者是一种特殊的网络工作者,用于管理页面资源(例如离线应用程序)。 –

回答

2

服务人员是在注册时基本执行一次(在后台)的脚本。如果您需要执行一些经常性的代码,你需要使用service worker API

服务工作者是对原点和路径注册的事件驱动的工人。

安装事件被称为异步你叫navigator.serviceWorker.register('/sw.js')后;这就是为什么它返回Promise,你通过callback函数(内容为console.log('ServiceWorker registration successful ...');)。

+0

那么,什么时候安装事件实际上被解雇呢?我知道我们正在捕获页面和其他资源,但是什么时候这个安装事件实际上被解雇了。 –

+0

因此,一旦服务人员登记正确,安装事件只会触发一次? @Wikiti –

+0

MDN链接回答我的问题https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API –

1

服务人员被设计为坐在您的网站和网络之间。因此,当您最初加载页面时,如果您添加了一个事件来侦听安装,它会运行一次脚本并安装服务工作者。

一旦完成,您需要将侦听器附加到“获取”事件以捕获您网页中的所有请求。 所以基本上,如果你想CONSOLE.LOG每次提出要求时,你可以做到以下几点:

self.addEventListener('fetch', event => { 
    console.log(event); 
})