ChromeデスクトップとChromeモバイルでサービスワーカーがうまくいっています。Chromeデスクトップ(監視Chrome USB経由でリモートでモバイル)。私のService Workerは この例 に非常に密接に基づいています。ページはネットワーク接続なしで正常に再読み込みされます、およびDevToolsの[ネットワーク]タブから、リソースがキャッシュされ、サービスワーカーによって期待どおりに提供されていることを確認できます。
しかし、同じページをWebViewにロードしていて、ServiceWorkerが実際に正しく登録されて正常に動作しているかどうかを判断するのに苦労しています。 Chromeデスクトップ/モバイルのDevToolsでできるのと同じ方法でこれをデバッグする方法を見ることができません。
確かなことは、ページがWebViewにあるときに接続がないとリロードされないため、一部のリソースがキャッシュされていないことです。これは、サービスワーカー WebViewでサポートされているようです という事実にもかかわらずです。
Chromeの場合と同じように機能させるために不足している可能性のある手順や設定を探して、 ServiceWorkerController と ServiceWorkerWebSettings に出くわしましたが、ドキュメントが見つからないか、これらの例(リンクされている基本的なドキュメントを除く)。 StackOverflowでこれらの用語を検索しても、結果はゼロになります。
サービスワーカーが接続されたページをロードするWebViewのどこかに実用的な例はありますか?上記の2つのクラスの使用方法について何か考えはありますか...実際に必要ですか?
これは部分的な答えにすぎませんが、とにかく役立つことを願っています。
私の知る限り、ServiceWorkerController
はJava WebView用のServiceWorkerの実装であり、Javascriptの実装とは別のものです。2つ決して結びついていないようです。
Java実装は、アプリケーション内のすべてのWebViewに永続的で影響を与えるシングルトンであり、その唯一の方法はshouldInterceptRequest
を介してリクエストをインターセプトすることです。これはWebViewClient
、後者はより多くの機能を持ち、(setWebViewClient
を介して)接続されているWebViewにのみ影響します。
あなたが投稿した link は、WebViewsがJavascriptバージョンのServiceWorkerをサポートしていることを示しているようです。 WebSettings.setJavascriptEnabled
を介してJavascriptを有効にするのを偶然見逃しましたか?また、ServiceWorkersはAndroid 5.0以降でのみ有効になっているため、最小のSDKバージョン21をターゲットにしていることを確認してください。あなたまたは誰かがJavascriptServiceWorkerを内部で機能させることができたかどうかを知りたいです。 WebViewも同様です。