Chrome

时间:2017-02-27 10:19:20

标签: javascript google-chrome firebase firebase-cloud-messaging

我正在尝试在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-messaging-sw.js

因此,我得到错误: 使用GWT时找不到Firebase服务工作程序(404错误)

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

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

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. 外部块执行功能检测测试,以确保在尝试注册服务工作者之前支持服务工作者。
  2.   
  3. 接下来,我们使用ServiceWorkerContainer.register()函数为此站点注册服务工作者,这只是一个JavaScript   驻留在我们的应用程序内的文件(注意这是文件的URL相对于   原点,而不是引用它的JS文件。)
  4.   
  5. scope参数是可选的,可用于指定您希望服务工作者控制的内容子集。在   在这种情况下,我们指定了'/ sw-test /',这意味着所有内容   根据应用程序的来源。如果你把它遗漏,它将默认为这个   无论如何,我们在这里指定它是为了说明目的。
  6.   
  7. .then()promise函数用于将成功案例链接到我们的promise结构。当承诺成功解决时,   里面的代码执行。
  8.   
  9. 最后,我们将.catch()函数链接到将在承诺被拒绝时运行的末尾。
  10.         

    这将注册一个在工作者上下文中运行的服务工作者   因此没有DOM访问权限。然后,您在服务工作者中运行代码   在正常页面之外控制它们的装载。