我正在尝试制作一个具有离线功能的 Spring MVC 应用程序。除了获取处理程序之外,一切都工作正常。

问题:

我能够成功注册我的服务工作线程,但是当涉及到获取处理程序时,它不起作用。

我尝试过的事情:

在获取处理程序的上方和下方使用了调试器。我发现它从未被调用。我无法找出这种奇怪行为背后的原因。

self.addEventListener('install', function(event) { 
    console.log('The service worker is being installed.');   
    event.waitUntil(precache()); 
}); 
 
self.addEventListener('fetch', function(event) { 
    alert("Hi");   
}); 

请您参考如下方法:

"a service worker registration ties the provided script URL to a scope, which is subsequently used for navigation matching."

你可能正在做的是 navigator.serviceWorker.register( '{SOME_RESOURCE_PATH}/service-worker.js') 甚至设置scope: './'。这样做的问题是,它会使您的提取仅在 https://foo.bar/{SOME_RESOURCE_PATH}/ 上触发。这意味着您需要将 sw 设置到站点的根目录上以删除所需的资源路径。您需要做的就是更改配置,将软件放在站点的根目录下。

例如。您可以在 mvc-config.xml

中执行哪些操作
<mvc:resources mapping="/**" location="classpath:/PATH_TO_SW/"/> 

然后注册软件看起来像

navigator.serviceWorker.register( '/service-worker.js') 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!