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

时间:2017-08-19 15:09:57

标签: android google-chrome webview google-chrome-devtools

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

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

可以肯定的是,当页面在WebView中时,页面不会在没有连接的情况下重新加载,因此某些资源不会被缓存。尽管服务人员seem to be supported in WebView已经存在这一事实。

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

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

1 个答案:

答案 0 :(得分:1)

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

据我所知,ServiceWorkerController是ServiceWorker for WebView的Java实现,它独立于Javascript实现。 这两者似乎没有任何联系在一起。

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

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