- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景
我是服务人员的新手,但正在处理 library旨在成为“离线优先”(实际上,几乎是“仅离线”)(FWIW,其目的是允许库的使用者提供表示表格多线性文本的 JSON 配置,并获得一个允许其用户的应用程序按段落/诗句范围以高度可定制的方式浏览这些文本。)
其他项目是将库安装为依赖项,然后通过我们的 JavaScript API 提供信息,例如 JSON 配置文件的路径,指示我们的应用程序将使用哪些文件为它们生成(离线)应用程序。
虽然我知道我们可以做以下任何事情:
install
将从该路径中获取。脚本可以使用 waitUntil
使用自己的 JSON 请求来检索用户的必要文件 install
JSON 文件的 service worker 步骤,并依赖 fetch
更新缓存的事件,如果用户在获取可能发生之前完成安装并离线,则提供后备显示。 install
之前进行查询事件。 install
事件以查看所有必需的提取发生。 install
之前将消息或状态信息传递给服务人员?事件发生,无论是作为服务 worker URL 的查询字符串的一部分,还是通过消息传递事件?从技术上讲,消息事件甚至可以在
install
之后到达。只要事件可以在
waitUntil
之前发生就开始在
install
内已经完成。
indexedDB
可能是这里唯一的选择(即,将配置信息或 JSON 配置的路径保存到 indexedDB,注册服务 worker ,并从
install
事件中检索 indexedDB 数据)?即使这也不是理想的,因为我让用户为他们的存储定义一个命名空间,但我也需要一种方法将它传递给工作人员,否则,源上的多个此类应用程序可能会发生冲突。
最佳答案
使用查询参数
如果你觉得它有用,那么是的,你可以在服务 worker 安装期间提供状态,方法是在注册服务 worker 时包含一个查询参数,如下所示:
// Inside your main page:
const pathToJson = '/path/to/file.json';
const swUrl = '/sw.js?pathToJson=' + encodeURIComponent(pathToJson);
navigator.serviceWorker.register(swUrl);
// Inside your sw.js:
self.addEventListener('install', event => {
const pathToJson = new URL(location).searchParams.get('pathToJson');
event.waitUntil(
fetch(pathToJson)
.then(response => response.json())
.then(jsonData => /* Do something with jsonData */)
);
});
fetch()
install
中的 JSON 文件处理程序(如代码示例中所示),每个版本的服务 worker 脚本( sw.js
)都会有效地发生一次。如果 JSON 文件的内容发生了变化,但其他一切都保持不变,则 service worker 不会自动检测到并重新填充您的缓存。 window.caches
公开它。 .预缓存
install
中的文件不过,Service Worker 的处理程序确实具有确保在 Service Worker 安装之前成功缓存所有文件的优势。
window
写入 IndexedDB。上下文,然后从 Service Worker 的
install
中的 IndexedDB 读取处理程序。
关于javascript - 在 `install` 之前将状态信息传递给服务人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424709/
是否有用于手动测试的代码覆盖工具?比如我新写了30行代码,编译,然后运行,有什么办法可以快速验证这30行都运行了吗? 另外,后来,在我将代码 checkin 正式版本后,有什么方法可以验证测试部门在进
老实说,这是一个家庭作业问题,但我已经浪费了好几个小时,而且无法正确解决。它返回错误数量的结果或错误的数据: 我需要选择参与指导电影和/或在电影中表演的每个人以及他们所做的次数,如果至少 5 次。 有
我正在尝试测试 MacOS 的应用内购买。输入测试用户凭据后,App Store 提示:“当前收据无效或 ds 人员 ID 不匹配。”并且购买失败。 最佳答案 我尝试了很多方法来解决这个问题。 Get
我正在为 Jenkins 使用 ActiveDirectory 插件,因此用户必须使用他们的凭据登录到 Jenkins。然后用户在 Jenkins 中被称为 joe.doe,这很完美。 当同一个人 c
如何从 Infopath 人员/组选取器检索电子邮件地址?当我将人员/组选取器添加到 infopath 表单时,我只得到 3 个字段 DisplayName、AccountId、AccountType
在 Snow Leopard 中,可以在 iCal 事件中显示空闲/忙碌时间。我搜索了 CalStore.framework 的 header ,但找不到任何描述该字段的属性。如何检索日历事件的忙/闲
是否有人成功地从专门针对 SharePoint 2013 的新建或编辑表单中获取用户(个人或组)字段的值? 我已经尝试了通过搜索互联网找到的所有解决方案以及我自己能想到的所有解决方案,所有结果都为空白
所以我需要将一个 Twitter 帐户添加到 ABRecordRef 中。然而,最快的方法似乎是获取社交资料属性的多值引用,创建它的可变版本,查找它是否有 Twitter 条目,如果已经有,则创建
我正在尝试将使用 Tomcat(最初是 5.5,但可以与 7 一起使用)在 MyEclipse 中开发的应用程序部署到我们的演示服务器 (Sun Java Web Server 7)。不幸的是,所有设
我是一名优秀的程序员,十分优秀!