我在https://github.com/GoogleChrome/workbox/issues/1663报告了完全相同的问题,该问题描述了仅在 Safari 中发生的问题,其中 mp4 视频在被服务人员缓存后未呈现。
我正在使用workbox-webpack-plugin
,因此评论中提供的说明https://github.com/GoogleChrome/workbox/issues/1663#issuecomment-448755945不适用于我的情况。我无法workbox-range-requests
在我的 webpack 配置文件中要求插件并将其传递给运行时缓存选项,因为我相信这个包仅供浏览器使用。我的工作箱配置正在预缓存 .mp4 资产,并使用网络优先策略进行运行时缓存。
我该如何workbox-range-requests
设置workbox-webpack-plugin
?
编辑:在下面 Jeff 的回答之后,我将我的 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(),
],
}),
);
如果之前忘记提及,但我还crossOrigin="anonymous"
为元素添加了属性video
。
编辑:
证明它在 Safari 上无法按预期工作的重现:https ://github.com/acostalima/workbox-range-requests-mp4-demo