使用 Service Worker 在浏览器关闭时,发送请求
时间: 2024-09-19 13:02:31 浏览: 59
service worker
Service Worker 是一种在浏览器后台运行的 JavaScript 线程,用于处理离线数据、推送通知等任务,并可以在用户与网站交互不活跃的时候提供服务。如果你想在浏览器窗口关闭前发送一次请求,你可以利用 Service Worker 的 `navigator.serviceWorker.onclose` 或 `fetchEvent.respondWith` 功能。
下面是一个简单的示例,展示如何在浏览器窗口关闭时触发一个请求:
```javascript
// service-worker.js
self.addEventListener('install', function(event) {
// 这里通常做安装时的初始化工作
});
self.addEventListener('activate', function(event) {
// 如果之前有SW并已安装,此处可以清理资源
});
self.addEventListener('fetch', function(event) {
if (event.request.url === 'https://your-api.com/some-resource') { // 替换为你需要的URL
event.respondWith(
fetch(event.request)
.then(response => {
// 在window.close之前保存数据或发送请求
if (navigator.serviceWorker.controller && window.close) {
setTimeout(() => {
fetch('/save-data', { method: 'POST', body: JSON.stringify({ data: response.text() }) });
window.close();
}, 0);
}
return response;
})
);
} else {
event.respondWith(fetch(event.request));
}
});
```
在这个例子中,当页面试图访问指定 URL 时,如果 Service Worker 控制了当前会话,它会在完成响应之前检查是否应该关闭浏览器窗口。如果是,它会延迟一段时间(这里是立即)并在窗口关闭前发送数据到 `/save-data` 接口。
阅读全文