WebView与服务工作者(什么是ServiceWorkerController和ServiceWorkerWebSettings?)

drm*_*wer 8 android google-chrome webview google-chrome-devtools

我有一个服务工作者在Chrome桌面和Chrome移动设备上运行良好,我可以通过Chrome桌面上的惊人DevTools(通过USB远程监控Chrome移动设备)准确地告诉我们发生了什么.我的服务人员非常关注这个例子.页面在没有网络连接的情况下重新加载,并且从DevTools的"网络"选项卡中,我可以确认服务工作者正在按预期缓存和提供资源.

但我也在WebView中加载相同的页面,我正在努力确定服务工作者是否实际正在正确注册并按预期运行.我无法像在Chrome桌面/移动设备上使用DevTools那样看到调试方法.

可以肯定的是,当页面在WebView中时,页面不会在没有连接的情况下重新加载,因此某些资源不会被缓存.尽管事实上服务工作者似乎在WebView中得到支持.

环顾我可能缺少的可能步骤或设置以使其像在Chrome中一样工作,我遇到了ServiceWorkerControllerServiceWorkerWebSettings,但找不到任何文档或示例(除了链接的基本文档).在StackOverflow上搜索这些术语会得到零结果.

是否有一个WebView的某个工作示例加载带有附加服务工作者的页面?知道如何使用上述两个类......他们真的有必要吗?

小智 1

这只是部分答案,但希望它能有所帮助:

据我所知,这ServiceWorkerController是 ServiceWorker for WebView 的 Java 实现,它与 Javascript 实现是分开的。 两者似乎没有任何联系。

Java 实现是一个单例,它持久存在并影响应用程序中的所有 WebView,其唯一方法是通过shouldInterceptRequest. 它与 非常相似WebViewClient,后者具有更多功能,并且仅影响它附加到的 WebView(通过setWebViewClient)。

您发布的链接似乎确实表明 WebViews 确实支持 ServiceWorker 的Javascript版本。您是否错过了通过 启用 Javascript 的机会WebSettings.setJavascriptEnabled?另外,请确保您的目标是最低 SDK 版本 21,因为 ServiceWorkers 仅在 Android 5.0 及更高版本中启用。我很想知道您或任何人是否设法让 Javascript ServiceWorker 在 WebView 中运行。