问题标签 [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.
javascript - 如何缓存托管或远程 json 文件以使应用程序在离线状态下正常工作
我正在构建一个可以离线工作的应用程序。这是一个使用 angularjs 和 firebase 的视频网络应用程序。
该应用程序从 firebase 数据库接收数据,例如在服务 js 文件中:
我使用该服务从 firebase 数据库中获取 json 数据。视频本身保存在 Firebase 存储中。
在控制器中,我接收数据并显示在我的模板中。
这在网上工作得很好,但即使我的应用程序在使用 sw-precache 时完全离线时也不能离线工作。
所以我的问题是无论如何要捕获这个外部托管的 json 文件,以便在应用程序离线时可以使用 json 数据。
第二个问题也是关于使用 sw precache 捕获 cdn 托管文件。因此,如果应用程序在线,将加载文件,如果不使用磁盘中可用的缓存 cdns 文件。
离线时,json 文件头响应为“加载数据失败”。
sw-precache - 如何在 sw-precache 中将默认的缓存优先策略更改为网络优先策略?
这是我的吞咽任务:
});
从上面的配置中,登录和管理路由仅使用网络获取,索引路由首先从缓存中提供,但我希望它首先是网络,因为我是从服务器端绑定我的页面。所以动态数据不会在应用程序中复制,除非 ctrl + f5
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
有疑问请评论
reactjs - 缓存了 shell 的渐进式 webapp 仍然没有按预期运行?
我在我的 React 应用程序中使用了 Sw-precache 来预缓存我构建的资产(即 vendor.js、app.js 和图标)。然而,结果并不理想。在页面重新加载时,我的应用程序资产都被再次(从服务人员)获取,但至少所有内容都会消失(页面变为空白)片刻并且资产出现。 我的应用程序在页面重新加载时的屏幕截图。相比之下,这是来自https://pwa.rocks/列表中的 Session应用程序。这确实具有离线缓存,即使在重新加载时也不会重新获取静态资产。这也是页面重新加载时会话应用程序的屏幕截图。我很肯定有些事情我没有做。我错过了什么?
javascript - sw-precache:已删除缓存,FetchEvent 错误响应
我正在使用 sw-precache 为 Web 应用程序添加离线支持。
我的设置:
- 带有 CSS/JS/HTML 的静态网站 动态内容通过自定义 indexedDB 解决方案进行处理。
- 使用 Grunt 任务生成 service-worker。
- sw-precache (4.0.0) 用于缓存所有静态资产。
- 在 apache 上设置的 service-worker.js 上的缓存标头如下:
在通常情况下,事情似乎工作正常。但是,如果由于某种原因,用户清除了缓存(例如在 chrome 开发工具 -> 应用程序 -> 清除存储(选择所有内容)-> 单击“清除所选内容”),即使我在线并且我的网页也不会加载我在控制台中看到以下错误:
“ https://my.somedomain.com/somepath/somepage.html ” 的 FetchEvent 导致网络错误响应:一个不是响应的对象被传递给了 respondWith()。
当我查看生成的 service-worker.js 时,我注意到以下代码。
调试时,我没有看到 catch 块被执行。另请参阅传递给 respondWith() 的返回的对象的附加调试输出 catch.match
所以我的问题:
- 为什么 sw-precache 在缓存中找不到条目时不会回退到网络?
- 当在缓存中找不到请求条目时,是否有强制网络请求?
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)。
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 是一个了不起的工具,我绝对希望在我的项目中使用它。我只需要学习如何驯服野兽。
sw-precache - 如何在 sw-precache 中缓存新的 fetch 请求
我正在尝试使用sw-precache来增强 Web 应用程序中的离线体验。
据我了解,该库(如果我错了,请纠正我)是预先缓存所有静态资产。新的请求呢?
假设我想缓存新获取获取请求的响应。
是否可以覆盖/扩展
self.addEventListener('fetch', ...
生成的 sw 文件中已经提供的内容
我可能在这里非常想念一些东西。请启发我...
progressive-web-apps - 使用 sw-precache 缓存外部资源
我正在尝试sw-precache
预缓存外部 CDN 资源,但生成的 service-worker.js 不包含precacheConfig
数组中的 CDN url。
这就是我的gulpfile
:
我的本地client/assets
文件夹中的文件被添加到precacheConfig
数组中,但外部字体真棒 css 不是。有没有办法做到这一点?