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