facebook - 在 Facebook 浏览器中更新 Service Worker

标签 facebook service-worker progressive-web-apps

遇到一个问题,我们的一些用户在我们网站的 Facebook 浏览器中有一个有问题的 Service Worker。

问题:当 Facebook 应用程序用户访问我们在 FB 上共享的页面时,他们在 FB 浏览器上看到我们的“您离线页面”。

该错误似乎是旧版本的 Google Workbox (3.6.1) 在使用 Chrome 75 的 FB 应用程序中自动返回“您离线”页面。更新 Workbox 修复了它。

Workbox 的引用在 service worker 中,所以当我们更新我们的 Workbox 版本(解决了这个问题)时,一些用户仍然缓存了旧版本。

如果用户清除他们的 FB 应用程序缓存或重新安装 FB,那么一切都很好,他们可以看到我们的内容。但我们想尝试强制 SW 更新而不要求他们这样做。

为了从 FB 浏览器中清除旧的 Service Worker,我们尝试了以下方法:

<script>
"use strict";
console.log("Service Worker Registration");

  function isFacebookApp() {
    var ua = navigator.userAgent || navigator.vendor || window.opera;
    return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1);
  }

  if ("serviceWorker" in navigator) {
    if(isFacebookApp() == true) {
      console.log("Service Worker Registration: using v2, via Facebook App");
      navigator.serviceWorker.getRegistrations().then(function(registrations) {
        for(let registration of registrations) {
          console.log("Service Worker Registration: "+registration);
          registration.unregister();
        }
      });
    } else {
      console.log("Service Worker Registration: using v2, not via Facebook App");
      window.addEventListener("load", () => {
          navigator.serviceWorker.register("/sw.js");
      });
    }
  }
</script>

但是,我们的分析表明,您仍然离线页面上的点击率仍然很高,而且我们仍然收到用户的报告,他们可以点击指向我们文章的链接。

有人可以帮忙吗?有没有办法强制 FB 的应用内浏览器更新缓存,并让我们的用户使用有效的 Service Worker?

更新

到目前为止我们已经尝试过:

  • 通过在 SW 注册 URL 中使用查询字符串来欺骗浏览器更新 Service worker
  • 遍历注册和取消注册()ing(见上文)
  • 在 Service Worker 代码中使用 skipWaiting()
  • 在 sw.js 的 header 中添加“无缓存”
  • 确保 sw.js 没有被服务器缓存
  • 删除或更改 /offline 页面导致 net::ERR_FAILED 错误
  • 我们怀疑我们所有的 service worker 修订版都可能存在一些看不见的错误,因此我们尝试了一个“空”的 service worker 以查看它是否可行并清除其他的

我们的分析表明:

  • Chrome Mobile 75 可能是个问题
  • 问题似乎是从 6 月 7 日开始出现的。

没有任何效果:我们的 Service Worker 或某物仍在返回离线页面...

最佳答案

这是 Chrome/Chromium WebView 中的错误,在 https://bugs.chromium.org/p/chromium/issues/detail?id=977784 中进行了跟踪

此时应广泛推出修复程序。

关于facebook - 在 Facebook 浏览器中更新 Service Worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56681774/

相关文章:

php - 如何在 Facebook 应用程序中只获取名字

mysql - Facebook 时间线数据库?

javascript - Serviceworker Bug event.respondWith

javascript - 在 React-Boilerplate 中使用 Firebase 身份验证时,服务工作线程捕获对 Google 的 __/auth 请求

javascript - 为什么 PWA Workbox 并不总是以相同的方式处理相同的路由?

javascript - 浏览器可以在关闭后重新启动 Web 应用程序安装横幅(chrome 添加到主屏幕)吗?

javascript - 我应该在 React 中遵循什么设计模式?

ios - 使用 xCode 登录 Facebook 的 Phonegap 3.0 应用程序

javascript - ServiceWorker更新后如何刷新页面?

caching - 使用工作箱时如何忽略缓存网址中的网址查询字符串?