Атрибут ononline тега <body>
Описание
Атрибут ononline позволяет задать JavaScript-код, который выполняется при восстановлении сетевого соединения. Это событие срабатывает, когда браузер переходит из автономного режима (offline) в онлайн-режим.
<body ononline="handleOnlineStatus()">
<div id="network-status">Проверка соединения...</div>
<script>
function handleOnlineStatus() {
const statusElement = document.getElementById('network-status');
statusElement.textContent = 'Соединение восстановлено';
statusElement.style.color = 'green';
// Синхронизируем данные с сервером
syncPendingData();
// Обновляем контент
fetchUpdates();
}
// Проверяем статус при загрузке
if (navigator.onLine) {
handleOnlineStatus();
}
</script>
</body>
Связанные события и свойства:
| Событие/Свойство | Описание |
|---|---|
onoffline |
Срабатывает при потере соединения |
navigator.onLine |
Boolean-свойство, указывающее статус соединения |
online / offline |
События, которые можно слушать через addEventListener |
Рекомендации по использованию:
- Используйте для автоматической синхронизации данных после восстановления связи
- Сочетайте с
onofflineдля полного контроля сетевого статуса - Реализуйте очередь задач для отложенного выполнения
- Уведомляйте пользователя о восстановлении соединения
- Проверяйте качество соединения перед тяжелыми операциями
Важные замечания:
- Событие может срабатывать преждевременно (при слабом соединении)
- Не все запросы могут быть успешными после восстановления связи
- На мобильных устройствах возможны частые переключения статуса
- Для важных операций проверяйте реальную доступность сервера
- Учитывайте ограничения localStorage (обычно 5MB)
Современные альтернативы:
<script>
// 1. Использование Background Sync API
if ('serviceWorker' in navigator && 'SyncManager' in window) {
navigator.serviceWorker.ready.then(registration => {
registration.sync.register('sync-data');
});
}
// 2. Использование IndexedDB для хранения данных
const dbPromise = indexedDB.open('offlineDB', 1);
dbPromise.onupgradeneeded = (event) => {
const db = event.target.result;
db.createObjectStore('pending', { autoIncrement: true });
};
// 3. Продвинутая проверка соединения
async function checkRealConnection() {
try {
const response = await fetch('https://httpbin.org/get', {
method: 'HEAD',
cache: 'no-store',
timeout: 5000
});
return response.ok;
} catch {
return false;
}
}
</script>
Оптимизация пользовательского опыта:
- Показывайте понятные уведомления о статусе соединения
- Реализуйте прогресс-бар для синхронизации
- Разрешайте пользователю вручную запускать синхронизацию
- Храните метку времени последней успешной синхронизации
- Предусмотрите обработку конфликтов данных
Примечание: Для надежной работы в условиях нестабильного соединения рекомендуется использовать комбинацию ononline/onoffline событий, Service Workers и устойчивых клиентских хранилищ данных.