使用localhost注册服务工作程序失败

时间:2015-04-18 13:17:08

标签: google-chrome express service-worker

当我尝试在由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);
    });

  }

2 个答案:

答案 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。如果您的服务工作者注册现在成功,您将知道您的快速服务器设置问题而不是您的服务工作者注册代码。