Атрибут onoffline тега <body>
Описание
Атрибут onoffline позволяет задать JavaScript-код, который выполняется при потере сетевого соединения. Это событие срабатывает, когда браузер переходит в автономный режим (offline).
<body onoffline="handleOfflineStatus()">
<div id="network-status">Соединение активно</div>
<script>
function handleOfflineStatus() {
const statusElement = document.getElementById('network-status');
statusElement.textContent = 'Вы в автономном режиме';
statusElement.style.color = 'red';
// Показываем уведомление пользователю
alert('Соединение с интернетом потеряно. Некоторые функции недоступны.');
// Сохраняем данные локально
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready.then(registration => {
registration.sync.register('save-data');
});
}
}
</script>
</body>
Связанные события:
| Событие | Когда срабатывает |
|---|---|
ononline |
При восстановлении соединения |
navigator.onLine |
Свойство, возвращающее текущий статус |
Рекомендации по использованию:
- Используйте для уведомления пользователей о потере соединения
- Реализуйте автономное хранение данных (localStorage, IndexedDB)
- Предусмотрите механизм синхронизации при восстановлении связи
- Для PWA используйте Service Worker для кэширования ресурсов
- Тестируйте в разных браузерах и на разных устройствах
Важные замечания:
- Событие может срабатывать с задержкой (5-10 секунд)
- Не все браузеры одинаково точно определяют статус
- На мобильных устройствах возможны ложные срабатывания
- Для точного определения состояния сети используйте fetch()
- Событие не срабатывает при первоначальной загрузке в offline
Современные подходы:
<script>
// 1. Использование Network Information API
if ('connection' in navigator) {
navigator.connection.addEventListener('change', () => {
console.log('Тип соединения изменился:', navigator.connection.effectiveType);
});
}
// 2. Периодическая проверка соединения
setInterval(async () => {
try {
const response = await fetch('https://httpbin.org/get', {
method: 'HEAD',
cache: 'no-store'
});
if (!navigator.onLine) window.dispatchEvent(new Event('online'));
} catch {
if (navigator.onLine) window.dispatchEvent(new Event('offline'));
}
}, 15000);
// 3. Использование Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
.then(registration => {
registration.update();
});
}
</script>
Оптимизация для PWA:
- Используйте Workbox для кэширования критических ресурсов
- Реализуйте стратегию "Network falling back to cache"
- Храните пользовательские данные в IndexedDB
- Используйте Background Sync API для отложенной синхронизации
- Предусмотрите автономную страницу в манифесте
Примечание: Для создания полноценного оффлайн-опыта в современных веб-приложениях рекомендуется использовать комбинацию Service Workers, Cache API и IndexedDB, а не полагаться только на события online/offline.