我正在阅读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中创建了一个sw.js文件并编写了一个console.log
console.log("This is sw.js")因此,当我第一次访问index.html文件时,将执行该console.log并输出ServiceWorker注册成功消息。但是当我第二次刷新页面时,它只输出消息ServiceWorker注册成功。那么为什么它不在sw.js中第二次执行console.log呢?我期望它第二次执行那个console.log。我是不是没抓住要点?
发布于 2017-06-05 16:19:08
服务工作者是在注册时基本上(在后台)执行一次的脚本。如果需要执行一些递归代码,则需要使用service worker API
服务工作者是根据源和路径注册的事件驱动的工作者。
install事件在您调用navigator.serviceWorker.register('/sw.js')之后被称为asynchronously;这就是为什么它返回一个Promise,您要将一个callback函数(带有内容console.log('ServiceWorker registration successful ...');的那个函数)传递给它。
发布于 2017-06-05 16:21:18
服务工作者被设计为坐在您的网站和网络之间。因此,当您最初加载页面时,如果您添加了要侦听安装的事件,则它会运行一次脚本并安装服务工作器。
完成后,您需要将一个侦听器附加到'fetch‘事件,以捕获页面中的所有请求。因此,基本上,如果您想在每次发出请求时都执行console.log,您可以执行以下操作:
self.addEventListener('fetch', event => {
console.log(event);
})https://stackoverflow.com/questions/44364451
复制相似问题