【发布时间】:2019-11-03 00:37:35
【问题描述】:
遇到了一个问题,我们的一些用户在我们网站的 Facebook 浏览器中有一个有问题的 Service Worker。
问题:当 Facebook 应用用户访问我们在 FB 上共享的页面时,他们会在 FB 浏览器上看到我们的“您处于离线页面”。
该错误似乎是旧版本的 Google Workbox (3.6.1) 在使用 Chrome 75 的 FB 应用程序中自动返回“您处于离线状态”页面。更新 Workbox 修复了它。
对 Workbox 的引用是在 service worker 中,所以当我们更新我们的 Workbox 版本(修复了问题)时,一些用户仍然缓存了旧版本。
如果用户清除他们的 FB 应用缓存或重新安装 FB,那么一切都很好,他们可以看到我们的内容。但我们想尝试强制软件更新而不要求他们这样做。
为了从 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
- 遍历注册和 unregister()ing(见上文)
- 在 Service Worker 代码中使用
skipWaiting() - 在 sw.js 的标头中添加“no-cache”
- 确保 sw.js 没有被服务器缓存
- 删除或更改
/offline页面导致net::ERR_FAILED错误 - 我们怀疑我们所有的 Service Worker 修订版都可能存在一些不可见的错误,因此我们尝试了一个“空”的 Service Worker,看看这是否可行并清除其他版本
我们的分析表明:
- Chrome Mobile 75 可能是个问题
- 问题似乎自 6 月 7 日以来就出现了。
没有任何效果:我们的 Service Worker 或 something 仍在返回离线页面...
【问题讨论】:
-
非常感谢 @dogsolitude_uk 记录详细信息 - 我们遇到了同样的问题,很高兴发现我们不是唯一的问题...我已经在 developers.facebook.com/community/threads/2324574930953602 上展开了讨论,希望得到一些官方的回应。我们已经/正在运行最新版本的 Workbox (4.3.1)。您知道具体是哪个固定问题解决了您的问题(对于尚未注册 SW 的用户)吗?
-
谢谢@leomelzer ...我们还没有找到修复或强制FB浏览器更新其缓存的方法。它根本不听!上次更新后问题似乎也变得更糟:在某些情况下,我们甚至没有获得 /offline 页面并获得 net: ERR Failed 。
标签: facebook service-worker progressive-web-apps