【发布时间】:2019-07-27 01:32:37
【问题描述】:
我在https://github.com/GoogleChrome/workbox/issues/1663 上报告了完全相同的问题,该问题描述了仅在 Safari 中出现的问题,其中 mp4 视频在被服务人员缓存后未呈现。
我使用的是workbox-webpack-plugin,因此评论https://github.com/GoogleChrome/workbox/issues/1663#issuecomment-448755945 中提供的说明不适用于我的情况。我无法在我的 webpack 配置文件中要求 workbox-range-requests 插件并将其传递给运行时缓存选项,因为我相信这个包仅供浏览器使用。我的工作箱配置正在预缓存 .mp4 资产,并使用网络优先策略进行运行时缓存。
如何设置workbox-range-requests 和workbox-webpack-plugin?
编辑:在Jeff's answer below 之后,我已将我的 webpack 配置调整为以下内容:
new WorkboxPlugin.InjectManifest({
swSrc: serviceWorkerSrcPath,
swDest: serviceWorkerBuildPath,
importsDirectory: 'sw',
})
构建产生以下服务工作者:
importScripts("/_build/sw/precache-manifest.8a0be820b796b153c97ba206d9753bdb.js", "https://storage.googleapis.com/workbox-cdn/releases/3.6.2/workbox-sw.js");
workbox.precaching.precacheAndRoute(self.__precacheManifest || []);
workbox.routing.registerRoute(
/.*\.mp4/,
new workbox.strategies.CacheFirst({
cacheName: 'videos',
plugins: [
new workbox.cacheableResponse.Plugin({ statuses: [200] }),
new workbox.rangeRequests.Plugin(),
],
}),
);
如果之前忘了提及,但我还在video 元素中添加了crossOrigin="anonymous" 属性。
编辑:
演示它在 Safari 上无法按预期工作的重现:https://github.com/acostalima/workbox-range-requests-mp4-demo
【问题讨论】:
-
你解决过这个问题吗?我有完全一样的问题。即使使用范围请求插件仍然无法使其工作。
-
@PhilippJahoda 很抱歉很晚才回复。我最终实施了我自己的解决方案作为当时的解决方法。我没有机会关注 Workbox,但距今已经快两年了,这个问题可能已经解决了。
标签: safari service-worker workbox workbox-webpack-plugin