safari - 如何使用 workbox-webpack-plugin 在 Safari 中缓存 .mp4 文件?

标签 safari service-worker workbox workbox-webpack-plugin

我在 https://github.com/GoogleChrome/workbox/issues/1663 报告了完全相同的问题它描述了一个仅在 Safari 中发生的问题,其中 mp4 视频在被 Service Worker 缓存后不呈现。

我正在使用 workbox-webpack-plugin , 所以评论中提供的说明 https://github.com/GoogleChrome/workbox/issues/1663#issuecomment-448755945在我的情况下不起作用。我无法要求 workbox-range-requests我的 webpack 配置文件中的插件并将其传递给运行时缓存选项,因为我相信这个包仅供浏览器使用。我的工作箱配置预缓存 .mp4 Assets 并使用网络优先策略进行运行时缓存。

如何设置 workbox-range-requestsworkbox-webpack-plugin ?

编辑:关注 Jeff's answer below ,我已将我的 webpack 配置调整为以下内容:

new WorkboxPlugin.InjectManifest({
   swSrc: serviceWorkerSrcPath,
   swDest: serviceWorkerBuildPath,
   importsDirectory: 'sw',
})

构建产生以下服务 worker :

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元素。

最佳答案

Workbox 文档中的“Serve cached audio and video”配方中有针对此用例的特定指南。

您可以继续使用 workbox-webpack-plugin ,但我建议在 InjectManifest 中使用它模式,这将使您可以控制顶级服务 worker 文件。反过来,这将使遵循食谱成为可能。

This documentation有配置指南 workbox-webpack-pluginInjectManifest模式。

关于safari - 如何使用 workbox-webpack-plugin 在 Safari 中缓存 .mp4 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55005245/

相关文章:

php - 如何文本对齐 :center php echo text in Firefox?

javascript - 访问 chrome/firefox 图像缓存

firefox - 如何清除 Firefox 中的 Service Worker 缓存?

typescript - CRA-Typescript PWA 与 Workbox 进行后台同步?

service-worker - 什么是通过Workbox实现离线后备广告的正确方法

Javascript Safari 在确认()方法之前没有运行行

svg - ReactJS:在 Safari 中渲染 SVG 容器内的 SVG 标签失败

browser - Safari 找不到服务器。网站在所有其他浏览器上都正常

javascript - ServiceWorker 阻止任何外部资源

javascript - Service Worker 正在被 Workbox 缓存