当我尝试在由Express V4服务器节点/ Chrome 42上提供服务的基本应用程序中注册服务工作者时出现以下错误:
DOMException:注册ServiceWorker失败:HTTP响应错误 获取脚本时收到代码(404)。 {message:"失败 注册ServiceWorker:收到错误的HTTP res ...代码(404) 获取脚本。",名称:" NetworkError",代码:19,INDEX_SIZE_ERR: 1,DOMSTRING_SIZE_ERR:2 ...}代码:19消息:"无法
这是注册码:
if ('serviceWorker' in navigator){
console.log("SW present !!! ");
navigator.serviceWorker.register('worker.js', {
//scope: '/toto/'
}).then(function(registration){
console.log('Service worker registered : ', registration.scope);
})
.catch(function(err){
console.log("Service worker registration failed : ", err);
});
}
答案 0 :(得分:10)
我认为您正在尝试注册不存在的脚本。在这种情况下,这个问题来了。请检查脚本路径和范围路径。也许你在这个脚本所在的目录中没有任何'worker.js'。如果是这种情况,请提供完整路径或在同一目录中提供worker.js.
答案 1 :(得分:1)
使用快速服务器时也出现此错误。事实证明问题出在服务器设置本身,而不是服务工作者注册码。我告诉我的快递应用程序使用以下命令将index.html作为默认根目录:
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname + '/index.html'));
});
但是我没有告诉我要求它能够使用的任何其他文件的位置。在这个阶段,我唯一的另一个文件是位于目录根目录的服务工作者文件,所以我通过将此行添加到服务器文件来解决问题:
app.use(express.static(__dirname + '/'));
要调试您的问题是否与服务器本身有关,您可以下载Web Server for Chrome并将其指向应用的根目录。检查服务器是否已启动,然后单击Web服务器URL。如果您的服务工作者注册现在成功,您将知道您的快速服务器设置问题而不是您的服务工作者注册代码。