首页 文章

Chrome的Firebase消息服务工作者

提问于
浏览
0

我正在尝试在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

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

    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

    外部块执行功能检测测试,以确保在尝试注册服务工作者之前支持服务工作者 . 接下来,我们使用ServiceWorkerContainer.register()函数来注册此站点的服务工作者,这只是一个驻留在我们应用程序中的JavaScript文件(请注意,这是相对于源的文件URL,而不是引用它的JS文件 . )scope参数是可选的,可用于指定您希望服务工作者控制的内容子集 . 在这种情况下,我们指定了'/ sw-test /',这意味着应用程序来源下的所有内容 . 如果你把它遗漏了,它无论如何都会默认为这个值,但我们在这里指定它是为了说明目的 . .then()promise函数用于将成功案例链接到我们的promise结构 . 当promise成功解析时,它内部的代码就会执行 . 最后,我们将.catch()函数链接到将在promise被拒绝时运行的末尾 . 这将注册一个在工作者上下文中运行的服务工作者,因此没有DOM访问权限 . 然后,在普通页面之外的服务工作程序中运行代码以控制其加载 .

相关问题