2016-09-26 84 views
0

我试图在服务人员 中使用提取事件,但他没有为我工作。取不工作的服务人员

self.addEventListener('activate', function(event) { 
    console.log('Activated', event); 
    fetch('/embed_testing/notification/main.js').then(response => 
      function() { 
       console.log(response) 
      }); 
}); 

self.addEventListener('fetch', function(event) { 
    console.log("heyyyo"); 
    if (event.request.url === new URL('/', location).href) { 
    event.respondWith(
     new Response("<h1>Hello!</h1>", { 
     headers: {'Content-Type': 'text/html'} 
     }) 
    ) 
    } 
}); 

任何想法,为什么它不工作?

回答

0

A fetch()从服务人员内部发出的请求不会触发同一服务人员的fetch事件处理程序。 (如果是这样,你可以很容易地想象你进入递归循环的场景。)

如果你需要快速测试你的fetch事件处理程序是否正常工作,这似乎是你在这种情况下做的事情,最简单的方法可能是在DevTools中打开JavaScript控制台并手动执行fetch('/path/to/whatever')。从JavaScript控制台内部制作的fetch()将触发服务工作人员的fetch事件处理程序。

如果您对某些不仅仅是测试感兴趣的事情,而是分享在fetch事件处理程序内部使用的代码在处理程序外运行的代码实现的逻辑,那么推荐的方法是将代码重构为独立功能,然后从fetch事件处理程序以及服务人员中与其相关的任何其他位置调用该函数。

+0

你可以给我一个示例如何使用服务工作人员抓取js在我的项目中? – user6609184

+0

我不确定你的意思?如果我不得不猜测,也许你在谈论如何将外部JavaScript文件导入服务工作者,以便您可以在全局范围内使用它?如果是这样的话,那么你想使用['importScripts()'](https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/importScripts)方法,它将同步请求和评估一个外部脚本。 –

0

您是在Chrome测试您的应用程序的情况下,尝试(左侧选择“服务人员”)取消标志“网络旁路”在开发工具“应用程序”选项卡上