【问题标题】:Service worker fetch event handleR with spring MVCService Worker 使用 Spring MVC 获取事件句柄
【发布时间】:2017-06-02 12:28:56
【问题描述】:

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

问题:

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

我尝试过的事情:

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

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

self.addEventListener('fetch', function(event) {
    alert("Hi");  
});

【问题讨论】:

  • 确保 service worker 位于您网站的根目录。使用 spring MVC 添加了您倾向于在某些路径下拥有它的资源。

标签: javascript java spring-mvc service-worker progressive-web-apps


【解决方案1】:

"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: './'。这样做的问题是,它只会让您的 fetch 在https://foo.bar/{SOME_RESOURCE_PATH}/ 上触发。这意味着您需要将 sw 设置到站点的根目录以删除所需的资源路径。您需要做的是更改配置以将 sw 放在站点的根目录中。

例如。你可以在mvc-config.xml做些什么

<mvc:resources mapping="/**" location="classpath:/PATH_TO_SW/"/>

然后注册 sw 看起来像

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

【讨论】:

  • 从来不知道会是这个问题!!谢谢,我会试试这个,让你知道它是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多