【问题标题】:Use Service Worker to intercept requests on the first load of my site?在我的网站首次加载时使用 Service Worker 拦截请求?
【发布时间】:2016-04-13 09:41:21
【问题描述】:

TL;DR - 我希望我的服务人员在第一次访问我的网站后立即激活,而不是在第一次刷新后。

详情:

我使用 Service Worker 构建了一个渐进式 Web 应用,但注意到在第一次加载时(安装 SW 时)它不会拦截任何网络请求,直到用户刷新页面。

有什么办法可以让 Service Worker 在安装后立即开始拦截请求?

【问题讨论】:

    标签: service-worker progressive-web-apps


    【解决方案1】:

    您确实可以使用skipWaitingclients.claim 的组合,如下所示。

    这将导致 service worker 立即控制来自页面的网络请求。

    self.addEventListener('install', event => {
      // Bypass the waiting lifecycle stage,
      // just in case there's an older version of this SW registration.
      event.waitUntil(self.skipWaiting());
    });
    
    self.addEventListener('activate', event => {
      // Take control of all pages under this SW's scope immediately,
      // instead of waiting for reload/navigation.
      event.waitUntil(self.clients.claim());
    });
    

    【讨论】:

    • 这样做有什么缺点/缺点吗? (为什么这种行为不是默认行为?)
    • AFAICT 这不起作用。请参阅github.com/gaye/bug-1206947,它会执行此操作,但在首页加载时看不到 sw 中的请求。
    • 我认为我看到的行为可能是使用硬刷新的结果。似乎不可能在硬刷新时使用服务工作者(即使使用self.skipWaiting()self.clients.claim(),如上所示。
    • 不需要将skipWaiting() 传递给event.waitUntil(): github.com/GoogleChrome/samples/commit/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2020-07-23
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多