使用服务工作者进行缓存 - Chrome & Android Webview
Caching with service workers - Chrome & Android Webview
我在使用 ApplicationCache 离线工作的旧应用程序上工作。由于它已被弃用,我们想转向 Service Workers 以实现相同的目标。
Firefox 67 与我当前的 service worker 实现配合得很好:当我第一次访问该应用程序时,每个列为 'to-be-cached' 的文件都会被有效地下载和缓存。然后可以离线访问该应用程序。
然而,Chrome 74 和 Android WebView(看起来基于 Chrome 73 - 在 Cordova 应用程序中)的行为略有不同。当我第一次访问该应用程序时,每个 'to-be-cached' 文件的请求被放入 cache
。当我在线时,浏览应用程序效果很好。但是后来我切换到离线状态,现在只能访问我已经访问过的页面。
这是错误还是功能?不管是什么,有什么解决方法吗?
最后,这是我的理解:Firefox 比较其 URL 上的缓存资源 (string
)。因此,提供 URL 列表 (string
) 足以让 Firefox 缓存它们并稍后使用 Request
对象(在浏览 Web 应用程序时发送)检索它们。
Chrome 显然是在另一个值上比较缓存的资源(我还没找到是哪个)。然后,给出一个 URL 列表 (string
) 对 Chrome 来说是不够的。 Request
个对象和 URL (string
) 未被识别为相同。
基于W3C's specification cache.addAll
method,Chrome行为应该是正确的。但是 Firefox 的行为更简单。
我在使用 ApplicationCache 离线工作的旧应用程序上工作。由于它已被弃用,我们想转向 Service Workers 以实现相同的目标。
Firefox 67 与我当前的 service worker 实现配合得很好:当我第一次访问该应用程序时,每个列为 'to-be-cached' 的文件都会被有效地下载和缓存。然后可以离线访问该应用程序。
然而,Chrome 74 和 Android WebView(看起来基于 Chrome 73 - 在 Cordova 应用程序中)的行为略有不同。当我第一次访问该应用程序时,每个 'to-be-cached' 文件的请求被放入 cache
。当我在线时,浏览应用程序效果很好。但是后来我切换到离线状态,现在只能访问我已经访问过的页面。
这是错误还是功能?不管是什么,有什么解决方法吗?
最后,这是我的理解:Firefox 比较其 URL 上的缓存资源 (string
)。因此,提供 URL 列表 (string
) 足以让 Firefox 缓存它们并稍后使用 Request
对象(在浏览 Web 应用程序时发送)检索它们。
Chrome 显然是在另一个值上比较缓存的资源(我还没找到是哪个)。然后,给出一个 URL 列表 (string
) 对 Chrome 来说是不够的。 Request
个对象和 URL (string
) 未被识别为相同。
基于W3C's specification cache.addAll
method,Chrome行为应该是正确的。但是 Firefox 的行为更简单。