我有一个服务工作人员在Chrome桌面和Chrome移动设备上运行良好,我可以通过Chrome桌面中令人惊叹的DevTools(通过USB远程监控Chrome移动设备)准确地告诉我们发生了什么。我的服务人员非常依赖this example。页面在没有网络连接的情况下重新加载,并且从DevTools的“网络”选项卡中,我可以确认服务工作者正在按预期缓存和提供资源。
但我也在WebView中加载相同的页面,我正在努力确定服务工作者是否实际正在正确注册并按预期运行。我无法像在Chrome桌面/移动设备上使用DevTools那样看到调试方式。
可以肯定的是,当页面在WebView中时,页面不会在没有连接的情况下重新加载,因此某些资源不会被缓存。尽管服务人员seem to be supported in WebView已经存在这一事实。
环顾我可能缺少的可能步骤或设置,以便让它像在Chrome中一样工作,我遇到了ServiceWorkerController和ServiceWorkerWebSettings,但找不到这些文档或示例(除了基本文档链接)。在StackOverflow上搜索这些术语会得到零结果。
是否有一个WebView的某个工作示例加载带有附加服务工作者的页面?知道如何使用上述两个类......他们真的有必要吗?
答案 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。