Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 了解服务人员注册_Javascript_Service Worker - Fatal编程技术网

Javascript 了解服务人员注册

Javascript 了解服务人员注册,javascript,service-worker,Javascript,Service Worker,我正在阅读服务人员入门文档 因此,首先我们在范围中注册我们的ServiceWorker。所以我就这样做了 <!DOCTYPE html> <html> <head> <title>Getting started with Service Worker</title> </head> <body> <script type="text/javascript"> if ('serviceWor

我正在阅读服务人员入门文档

因此,首先我们在范围中注册我们的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>

因此,当我第一次访问index.html文件时,将执行console.log并打印ServiceWorker注册成功消息。但是当我第二次刷新页面时,它只打印消息ServiceWorker registration successful。那么为什么它没有第二次在sw.js中执行console.log呢。我希望它第二次执行console.log。我错过了这里的要点吗?

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

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


在调用
navigator.serviceworner.register('/sw.js')
之后,将异步调用安装事件;这就是它返回一个的原因,您可以向它传递一个
回调
函数(带有内容
console.log('ServiceWorker registration successful…');
)。

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

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

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

那么,安装事件实际上是什么时候触发的呢?我知道我们正在捕获页面和其他资源,但是这个安装事件实际上是什么时候触发的。所以,一旦服务工作者注册,安装事件只触发一次,对吗@Wikitit这个MDN链接回答了我的问题@MahtabAlam我很高兴听到这个消息。只是FWIW,有时候人们会感到困惑和一般用途的困惑。你确定你的工作需要一名服务人员吗?服务工作者是一种特殊的web工作者,用于管理页面资源(例如,脱机应用程序)。
self.addEventListener('fetch', event => {
  console.log(event);
})