最近才刚刚开始构建PWA,我认为隐私和控制的一个有用功能可能是网站上的切换,该切换允许用户强制网站保持脱机模式,直到再次按下切换。但是,经过一番研究,我找不到任何方法可以实现这一目标,有人有什么想法吗?预先感谢。
fetch
请求时决定要做什么。<input id="check-offline" type="checkbox" name="offline-mode">
<label for="check-offline">Offline mode</label>
在主线程中,选择按钮并注册您的Service Worker。只要工作人员成功注册,就将事件侦听器添加到您在此处创建的输入中,并侦听change
。在事件侦听器的处理程序中,使用工作程序上的postMessage
函数将检查的值发送给工作程序。
postMessage
然后在Service Worker脚本中创建一个对象(或变量)来存储当前设置。在const offLineToggle = document.getElementById('check-offline');
navigator.serviceWorker.register('/path/to/service-worker.js').then(registration => {
const serviceWorker = registration.active;
if (serviceWorker !== null) {
offLineToggle.addEventListener('change', event => {
serviceWorker.postMessage({
name: 'offlineMode',
value: event.target.checked
});
});
}
});
中侦听ServiceWorkerGlobalScope
事件。这是message
功能的接收端。您可以在这里处理数据并更新offlineMode的设置。然后添加另一个事件侦听器并侦听postMessage
事件,只要从主线程发出了fetch
请求,就会触发该事件。在事件处理程序中,检查离线模式是打开还是关闭,然后进行相应处理。
fetch
这都是如何工作的概述。在const settings = {
offlineMode: false
};
self.addEventListener('message', { data } => {
const { name, value } = data;
if (settings.hasOwnProperty(name)) {
settings[name] = value;
}
});
self.addEventListener('fetch', event => {
const { offlineMode } = settings;
if (offlineMode === true) {
// Force return data from cache.
} else {
// Get fresh data from the server.
}
});
上阅读以了解如何访问缓存并控制发送到客户端的数据。