Chrome上的Firebase消息传递服务工作者

问题描述:

我正试图在Eclipse IDE上实现FCM Chrome客户端。Chrome上的Firebase消息传递服务工作者

使用JavaScript,我尝试注册默认的服务人员:火力点的消息,sw.js但对于这个路径js文件无法通过项目来解决。

的SDK是在托管级搜索这个文件:/firebase-messaging-sw.js即https://localhost:8080/firebase-messaging-sw.js但不是在https://localhost:8080/myapp/firebase-messaging-sw.js

因此,我得到错误: 火力地堡服务工作者在使用GWT(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); 
    }); 
} 

From MDN

  1. 外块执行特征检测测试,以确保服务人员的支持尝试注册一个之前。接下来,我们使用ServiceWorkerContainer.register()函数注册该站点的服务工作人员,这只是一个驻留在我们的应用程序内的JavaScript 文件(注意这是该文件的URL相对于 的起源而不是JS文件引用它。)
  2. 范围参数是可选的,可以用来指定要的服务人员来控制你的内容的子集。在 这种情况下,我们指定了'/ sw-test /',这意味着该应用程序的所有内容 。如果您将其忽略掉,它将默认为这个值,但我们在此处指定它用于说明目的。
  3. 的。然后()承诺函数用于链成功的情况下到我们的承诺结构。当承诺解析成功时,其中的 代码将执行。
  4. 最后,我们链接一个.catch()函数,如果上的承诺被拒绝,将运行结束。

此注册服务工人,它运行在一个工人上下文,并且因此 没有DOM的访问。然后,你正常的网页,以控制其负载之外运行的服务人员 代码。