13

ノード Express V4 サーバー / Chrome 42 によって提供される基本的なアプリで Service Worker を登録しようとすると、次のエラーが発生します。

DOMException: ServiceWorker の登録に失敗しました: スクリプトの取得時に不正な HTTP 応答コード (404) を受け取りました。{メッセージ: "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);
    });

  }
4

2 に答える 2

4

エクスプレスサーバーを使用しているときにもこのエラーが発生しました。問題は、サービス ワーカーの登録コードではなく、サーバーのセットアップ自体にあることがわかりました。以下を使用して、デフォルトのルートとして index.html を取得するように Express アプリに指示しました。

app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname + '/index.html'));
});

ただし、使用できるようにしたい他のファイルの場所を明示するようには言いませんでした。この段階で、他のファイルはディレクトリのルートにある Service Worker ファイルだけだったので、次の行をサーバー ファイルに追加して問題を修正しました。

app.use(express.static(__dirname + '/'));

問題がサーバー自体にあるかどうかをデバッグするには、Web Server for Chromeをダウンロードして、アプリのルート ディレクトリに指定します。サーバーが起動していることを確認し、Web サーバーの URL をクリックします。Service Worker の登録が成功した場合は、Service Worker の登録コードではなく、高速サーバーのセットアップに問題があることがわかります。

于 2016-09-11T10:22:59.230 に答える