问题标签 [sw-precache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
80 浏览

javascript - 如何缓存托管或远程 json 文件以使应用程序在离线状态下正常工作

我正在构建一个可以离线工作的应用程序。这是一个使用 angularjs 和 firebase 的视频网络应用程序。

该应用程序从 firebase 数据库接收数据,例如在服务 js 文件中:

我使用该服务从 firebase 数据库中获取 json 数据。视频本身保存在 Firebase 存储中。

在控制器中,我接收数据并显示在我的模板中。

这在网上工作得很好,但即使我的应用程序在使用 sw-precache 时完全离线时也不能离线工作。

所以我的问题是无论如何要捕获这个外部托管的 json 文件,以便在应用程序离线时可以使用 json 数据。

第二个问题也是关于使用 sw precache 捕获 cdn 托管文件。因此,如果应用程序在线,将加载文件,如果不使用磁盘中可用的缓存 cdns 文件。

离线时,json 文件头响应为“加载数据失败”。

0 投票
1 回答
605 浏览

sw-precache - 如何在 sw-precache 中将默认的缓存优先策略更改为网络优先策略?

这是我的吞咽任务:

});

从上面的配置中,登录和管理路由仅使用网络获取,索引路由首先从缓存中提供,但我希望它首先是网络,因为我是从服务器端绑定我的页面。所以动态数据不会在应用程序中复制,除非 ctrl + f5

0 投票
2 回答
450 浏览

service-worker - 将 sw-toolbox 与 gulp 一起使用

我阅读了许多关于 sw-toolbox 和 sw-precache 的教程。我的疑问是:

在阅读 sw-precache 时,我发现大多数教程都使用gulp + sw-precache.

sw-toolbox以防万一,我看到了仅用于service-worker.js直接编写代码的示例和语法(没有 gulpfile 代码)。

我正在使用 gulp 自动生成service-worker文件。

所以我主要关心的是sw-toolbox直接在 gulp 文件中编写代码,这样我就不需要sw-toolbox在生成后sw-precache编写代码gulp

有疑问请评论

0 投票
1 回答
67 浏览

reactjs - 缓存了 shell 的渐进式 webapp 仍然没有按预期运行?

我在我的 React 应用程序中使用了 Sw-precache 来预缓存我构建的资产(即 vendor.js、app.js 和图标)。然而,结果并不理想。在页面重新加载时,我的应用程序资产都被再次(从服务人员)获取,但至少所有内容都会消失(页面变为空白)片刻并且资产出现。 我的应用程序在页面重新加载时的屏幕截图。相比之下,这是来自https://pwa.rocks/列表中的 Session应用程序。这确实具有离线缓存,即使在重新加载时也不会重新获取静态资产。这也是页面重新加载时会话应用程序的屏幕截图。我很肯定有些事情我没有做。我错过了什么?

0 投票
0 回答
1006 浏览

javascript - sw-precache:已删除缓存,FetchEvent 错误响应

我正在使用 sw-precache 为 Web 应用程序添加离线支持。

我的设置:

  1. 带有 CSS/JS/HTML 的静态网站 动态内容通过自定义 indexedDB 解决方案进行处理。
  2. 使用 Grunt 任务生成 service-worker。
  3. sw-precache (4.0.0) 用于缓存所有静态资产。
  4. 在 apache 上设置的 service-worker.js 上的缓存标头如下:

在通常情况下,事情似乎工作正常。但是,如果由于某种原因,用户清除了缓存(例如在 chrome 开发工具 -> 应用程序 -> 清除存储(选择所有内容)-> 单击“清除所选内容”),即使我在线并且我的网页也不会加载我在控制台中看到以下错误:

https://my.somedomain.com/somepath/somepage.html ” 的 FetchEvent 导致网络错误响应:一个不是响应的对象被传递给了 respondWith()。

当我查看生成的 service-worker.js 时,我注意到以下代码。

调试时,我没有看到 catch 块被执行。另请参阅传递给 respondWith() 的返回的对象的附加调试输出 catch.match 传递给 respondWith 的 promise 对象的控制台调试输出

所以我的问题:

  1. 为什么 sw-precache 在缓存中找不到条目时不会回退到网络?
  2. 当在缓存中找不到请求条目时,是否有强制网络请求?
0 投票
1 回答
2483 浏览

android - 科尔多瓦应用程序上的服务人员

我可以在 android 设备上运行的混合应用程序(ionic 1/cordova)中使用服务人员吗?尝试在 android 设备上运行的 ionic 应用程序上安装服务工作者时遇到一些错误,因为 android 使用文件协议来提供文件,而服务工作者需要通过 HTTPS 协议或 http 提供文件(仅适用于 localhost):

Service Worker 注册期间出错:DOMException:无法注册 ServiceWorker:不支持当前来源的 URL 协议('file://')。

它不是在移动浏览器上运行的传统渐进式 Web 应用程序,而是在 android 设备(webview + cordova)上运行。

我需要实现这一点,以便在我的 api 调用中利用我的应用程序和缓存策略(使用来自谷歌的 sw-precache e sw-toolbox)。

0 投票
1 回答
6211 浏览

laravel - Service Worker 加载资源失败:net::ERR_UNSAFE_REDIRECT

你能告诉我我的服务工作者安装做错了什么吗,我在 chrome 控制台中出现了这些错误(见图 1)。

如果有帮助,我会在后端使用 Laravel 框架

只是想知道我的 service-worker.js 位于网站的根目录中,在主页上正常工作,在 chrome 控制台上没有错误,但是当我尝试导航到例如帖子时,出现这两个错误(参见图片- 2)。

知道我使用 sw-precache 和 sw-toolbox,我使用 sw-precache 和 gulp 生成服务工作者。

图像-1

图像-2

0 投票
1 回答
1254 浏览

polymer - Service Worker:如何为每个新部署构建“新鲜”版本的网站?

问题

我在生产中遇到了一个网站(使用Polymer Shop模板构建)的问题,尽管我进行了新的和改进的部署,但它仍在提供旧版本的代码。

我正在使用 Polymer CLI$ polymer build命令和 Firebase 工具$ firebase deploy命令来推送对 Firebase 托管的更改。部署完成后,我导航到网站只看到未更新的更改:

  • Chrome:我首先看到的是旧版本的网站,必须“硬刷新”才能显示更改。

  • FireFox:我首先看到的是旧版本的网站,必须“硬刷新”才能显示更改。


这是之前的 n' 之后的镜头:

在此处输入图像描述


服务工作者工作流程?

我试图找出最好的工作流程是什么。我想进行设置,以便每次进行新部署时,整个站点都被清除干净,服务人员通过内部网络重置自己,我将 100% 确保现有用户将获得新部署的体验

无需硬刷新或使用隐身模式


我是不是该...

  • 删除服务工作者并在没有它的情况下部署新版本(坏主意)?
  • 在 Firebase 控制台中创建一个“新项目”并重新链接自定义域(乏味)?
  • 在 Firebase 控制台中找到“魔术按钮”以进行重置(是否存在)?
  • 编辑sw-precache-config.js文件(不确定如何)?
  • $ polymer build在配置中处理这个sw-precache(不确定如何)?
  • 甚至不知道的很棒的东西 ¯\_(ツ)_/¯

我知道问题存在于sw-precache-config.js文件中,但我不确定这是否是我应该解决的问题。


Service Worker 是一个了不起的工具,我绝对希望在我的项目中使用它。我只需要学习如何驯服野兽。

0 投票
1 回答
270 浏览

sw-precache - 如何在 sw-precache 中缓存新的 fetch 请求

我正在尝试使用sw-precache来增强 Web 应用程序中的离线体验。

据我了解,该库(如果我错了,请纠正我)是预先缓存所有静态资产。新的请求呢?

假设我想缓存新获取获取请求的响应。

是否可以覆盖/扩展 self.addEventListener('fetch', ...生成的 sw 文件中已经提供的内容

我可能在这里非常想念一些东西。请启发我...

0 投票
1 回答
2652 浏览

progressive-web-apps - 使用 sw-precache 缓存外部资源

我正在尝试sw-precache预缓存外部 CDN 资源,但生成的 service-worker.js 不包含precacheConfig数组中的 CDN url。

这就是我的gulpfile

我的本地client/assets文件夹中的文件被添加到precacheConfig数组中,但外部字体真棒 css 不是。有没有办法做到这一点?