首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解ServiceWorker注册

了解ServiceWorker注册
EN

Stack Overflow用户
提问于 2017-06-05 16:08:11
回答 2查看 3K关注 0票数 4

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

所以首先我们用作用域注册我们的ServiceWorker。所以我这样做了,如下

代码语言:javascript
复制
<!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

代码语言:javascript
复制
console.log("This is sw.js")

因此,当我第一次访问index.html文件时,将执行该console.log并输出ServiceWorker注册成功消息。但是当我第二次刷新页面时,它只输出消息ServiceWorker注册成功。那么为什么它不在sw.js中第二次执行console.log呢?我期望它第二次执行那个console.log。我是不是没抓住要点?

EN

回答 2

Stack Overflow用户

发布于 2017-06-05 16:19:08

服务工作者是在注册时基本上(在后台)执行一次的脚本。如果需要执行一些递归代码,则需要使用service worker API

服务工作者是根据源和路径注册的事件驱动的工作者。

install事件在您调用navigator.serviceWorker.register('/sw.js')之后被称为asynchronously;这就是为什么它返回一个Promise,您要将一个callback函数(带有内容console.log('ServiceWorker registration successful ...');的那个函数)传递给它。

票数 3
EN

Stack Overflow用户

发布于 2017-06-05 16:21:18

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

完成后,您需要将一个侦听器附加到'fetch‘事件,以捕获页面中的所有请求。因此,基本上,如果您想在每次发出请求时都执行console.log,您可以执行以下操作:

代码语言:javascript
复制
self.addEventListener('fetch', event => {
  console.log(event);
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44364451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档