【问题标题】:WebView with service worker (what are ServiceWorkerController and ServiceWorkerWebSettings?)带有服务工作者的 WebView(什么是 ServiceWorkerController 和 ServiceWorkerWebSettings?)
【发布时间】:2018-01-28 02:40:38
【问题描述】:

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

但我也在 WebView 中加载相同的页面,我正在努力确定服务人员是否真正正确注册并按应有的方式运行。我无法像在 Chrome 桌面/移动设备中使用 DevTools 那样调试它。

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

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

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

【问题讨论】:

  • 这方面有进展吗?

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2019-06-02
    相关资源
    最近更新 更多