2016-12-01 11 views
0

私は、バニラJavaScriptを使用してSPAを作成しており、現在はリソースのキャッシュを処理するためにsw-precacheを設定しています。サービスワーカーはgulpビルドの一部として生成され、正常にインストールされます。オフラインでrootのURL(http://127.0.0.1:8080/)に移動すると、実際にリソースがキャッシュされていることを示すアプリケーションシェルが表示されます。sw-precacheで内部ルートをキャッシュする

私は今、SWが内部ルーティングを失敗することなく処理しようとしています。オフライン中にhttp://127.0.0.1:8080/dashboard_indexに移動すると、「サイトにアクセスできません」というメッセージが表示されます。

アプリは、クライアント側でこのルーティングを一連のイベントリスナーを介してユーザーアクションで処理します。また、戻るボタンを使用する場合はurlを使用します。これらのURLの1つにアクセスする場合、サーバーへの呼び出しは行われません。そのため、サービスワーカーは、これらのリンクをクライアントサイドコードに渡すことを許可する必要があります。

私はいくつか試してみましたが、問題を解決するにはthis Q/Aが必要です。 generate-service-worker gulpタスクの現在の状態を含めました。この設定では、/dashboard_indexオフラインにアクセスできると予想しています。これが機能したら、他のルートをカバーするようにソリューションを適応させることができます。

ご迷惑をおかけして申し訳ございません。

gulp.task('generate-service-worker', function(callback) { 
    var rootDir = './public'; 

    swPrecache.write(path.join(rootDir, 'sw.js'), { 
    staticFileGlobs: [rootDir + '/*/*.{js,html,png,jpg,gif,svg}', 
         rootDir + '/*.{js,html,png,jpg,gif,json}'], 
    stripPrefix: rootDir, 
    navigateFallback: '/', 
    navigateFallbackWhitelist: [/\/dashboard_index/], 
    runtimeCaching: [{ 
     urlPattern: /^http:\/\/127\.0\.0\.1\:8080/getAllData, // Req returns all data the app needs 
     handler: 'networkFirst' 
    }], 
    verbose: true 
    }, callback); 
}); 

更新

アプリケーションのコードはhere見出すことができます。

オプションnavigateFallbackWhitelistを削除しても、結果は変化しません。

/dashboard_indexにナビゲートしている間、オフラインでコンソールに次のものを表示します。

同じAn unknown error occurred when fetching the script.も「アプリケーション>サービス労働者のクロームデバッグツールのタブに複製されます。

また、runtimeCachingオプションは、そのルートから返されたjson応答をキャッシュしていないことにも注意してください。レコードの

+0

あなたの現在の設定*は、あなたがしようとしているものを達成するはずです。あなたは 'sw-precache'の最新リリースを確認できますか? 'navigateFallbackWhitelist'オプションを完全に除外すれば助けになりますか? 'sw-precache'のバグであれば、これをhttps://github.com/GoogleChrome/sw-precache/issuesに移動すると意味があります。 –

+0

@JeffPosnick私は古いバージョンを使用していましたが、パッケージを4.2.3にアップデートした後も同じ結果が得られます。 – tonyedwardspz

+0

'navigateFallback: '/''を 'navigateFallback: '/ index.html''に切り替えることはできますか?プリキャッシュされたリソースのリストに ''/''のエントリがありませんが、 ''/ index.html' 'のエントリがあります。 ''/''と' '/ index.html' 'を同等のものとして自動的に扱うロジックがありますが、' 'navigateFallback'が何をしているのかは当てはまりません。 –

答えて

1

、場合には他の誰がこのに実行すると、私は信じてこの答えfrom the commentsは問題に対処する必要があります

あなたはnavigateFallback: '/index.html'navigateFallback: '/'から切り替えることができますか? のエントリが のリソースに事前に設定されていませんが、'/index.html'というエントリがあります。 '/''/index.html'を同等のものとして自動的に処理するロジックがありますが、 navigateFallbackが行っている処理には該当しません...

+0

これを確認するには、根本的なアーキテクチャの問題がなければ私の問題を解決できました。 – tonyedwardspz

関連する問題