当前位置: 首页 > 知识库问答 >
问题:

在Facebook浏览器中更新服务人员

冯祺
2023-03-14

有一个问题,我们的一些用户有一个错误的服务工作者坐在他们的Facebook浏览器从我们的网站。

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

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

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

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

为了从FB浏览器中清除旧的服务人员,我们尝试了以下方法:

<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>

然而,我们的分析显示,我们仍然在You is Offline页面上获得点击率,并且我们仍然从用户那里得到报告,他们可以跟踪我们文章的链接。

有人能帮忙吗?有没有办法强迫FB的应用程序内浏览器更新缓存,并让我们的用户使用一名工作的服务人员?

最新消息

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

  • 在软件注册URL中使用查询字符串愚弄浏览器更新服务人员
  • 重复进行注册和注销()操作(见上文)
  • 在服务人员代码中使用skipWaiting()
  • 将“无缓存”添加到sw上的标头。js
  • 确保软件。服务器未缓存js
  • 删除或更改/offline页面导致net::ERR\u失败错误
  • 我们怀疑我们所有的服务人员修订版中都可能有一些看不见的错误,所以我们尝试了一个“空”的服务人员,看看这是否可行,并清除其他的

我们的分析表明:

  • ChromeMobile 75可能是个问题
  • 自6月7日以来,问题似乎已经发生。

什么都没起作用:我们的服务人员或其他东西仍在返回离线页面...

共有2个答案

端木昱
2023-03-14

我们遇到了同样的问题,但表现略有不同——我们的用户开始收到一条错误消息“:: ERR失败”,尽管听起来是同一个原因。这个问题始于大约10天前,我设法绕过缓存的唯一方法是将用户发送到网站的新版本——通过从我发送到的网址中删除www.,并从301'ing到与www.

我也像你一样尝试了很多解决方案,但似乎不可能让服务人员联系网站-如果你把Charles放在手机和互联网之间,你会发现没有流量到达你的网站。我希望在停用一段时间后,服务人员将被应用程序缓存清理干净,我们可以切换回来。对不起,我帮不上什么忙,但请放心,你不是一个人!

赫连骏
2023-03-14

这是Chrome/ChromiumWebView中的一个bug,在https://bugs.chromium.org/p/chromium/issues/detail?id=977784

在这一点上,修复方案应该广泛推出。

 类似资料:
  • 我的应用程序是用Reac/Redux编写的,并使用Workbox生成我的服务人员。这是有效的-我可以在运行“workbox inject:manifest”时确认在生成的service worker中更新了修订。 但是,我注意到客户端不会在新版本后更新缓存,新代码只会在几次刷新后加载。对于每个版本,我都确认更新了版本。 到目前为止,我尝试在新版本发布后强制浏览器清除缓存的方法有: 在我的Servi

  • 我一直在阅读《html5rocks服务工作者简介》一文,并创建了一个基本的服务工作者,它可以缓存页面、JS和CSS,并按预期工作: 当我对CSS进行更改时,由于服务人员正在从缓存中正确返回CSS,因此不会拾取此更改。 我陷入困境的地方是,如果我要更改HTML、JS或CSS,我如何确保服务人员可以从服务器加载较新版本,而不是从缓存加载?我曾尝试在CSS导入上使用版本戳,但似乎不起作用。

  • 情况: 在我的网站上。com/game,我在 在我的服务器上,的最大值为。 问题: 。 问题是,每当用户访问,它显示空页面,不再执行任何操作。我无法让客户端获取新的。 如何让客户端获取新的?

  • 只是在基本的编码技巧上工作,当我在css文件中进行更改时,这些更改不会在非我的浏览器上显示出来。 下面是我的index.html代码: 非常感谢你给我时间。

  • 我正在开发一个基于云的后端HTTP服务,该服务将公开用于与一些on-prem系统的集成。客户机系统是由外部供应商定制的,它们是带有自己数据库的后端系统。这些系统部署在我们客户的公司中,我们无法访问它们,也无法控制它们。我们向供应商提供我们的API规范,他们实现客户机代码。 我的服务与客户交换的数据格式基于XML,并遵循一定的标准。供应商用不同的编程语言实现他们的客户机系统,随着时间的推移,新的供应

  • 问题内容: 我在我的角度应用程序中创建了工厂/服务。 我想在浏览器中调试它。有没有一种方法可以访问其实例并检查其函数和变量的值是什么? 角度范围可以使用 是否有类似的方式访问工厂? 问题答案: 我相信您可以使用以下方式: 并且由于angularjs服务是 单例的 ,因此在任何 angular.element 上执行此操作都将始终返回相同的服务实例/对象。