繁体   English   中英

Chrome上的Firebase Messaging服务人员

[英]Firebase Messaging service worker on chrome

我正在尝试在Eclipse IDE上实现FCM chrome客户端。

我正在尝试使用Javascript注册默认的服务工作者:firebase-messaging-sw.js,但是此js文件的路径无法由项目解析。

SDK会在托管级别搜索此文件:/firebase-messaging-sw.js,即https:// localhost:8080 / firebase-messaging-sw.js,但不在https:// localhost:8080 / myapp / firebase-消息-sw.js

因此,我收到错误消息:使用GWT时找不到Firebase Service worker(404错误)

我该如何解决这个问题?

默认情况下,服务工作者应驻留在应用程序的根目录下。 要在默认位置以外的其他位置注册服务工作者,您可以使用以下代码。

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw-test/sw.js', {scope: '/sw-test/'})
  .then(function(reg) {
    // registration worked
    console.log('Registration succeeded. Scope is ' + reg.scope);
  }).catch(function(error) {
    // registration failed
    console.log('Registration failed with ' + error);
  });
}

从MDN

  1. 外部模块执行功能检测测试,以确保在尝试注册服务人员之前支持服务人员。
  2. 接下来,我们使用ServiceWorkerContainer.register()函数为该站点注册服务工作者,这只是驻留在我们应用程序中的一个JavaScript文件(请注意,这是相对于原始文件的URL,而不是引用该URL的JS文件。 )
  3. scope参数是可选的,可用于指定您希望服务人员控制的内容子集。 在这种情况下,我们指定了“ / sw-test /”,这表示该应用程序起源下的所有内容。 如果您将其保留,则无论如何它将默认为该值,但出于说明目的,我们在此处指定了该值。
  4. .then()承诺函数用于将成功案例链接到我们的承诺结构。 当承诺成功解析后,其中的代码就会执行。
  5. 最后,我们将.catch()函数链接到最后一个被拒绝的承诺将运行的末尾。

这注册了一个在工作程序上下文中运行的服务工作程序,因此没有DOM访问权限。 然后,您可以在正常页面之外的服务工作者中运行代码以控制其加载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM