window / navigator / location
Глобальные браузерные объекты: window — корневой, navigator — про устройство, location — про URL.
Что это
window— глобальный scope в браузере. Все глобальные переменные становятся его свойствами. Хранит ссылки на все Web API:indexedDB,crypto,fetch, таймеры, и т.д.navigator— про устройство/браузер:geolocation,clipboard,serviceWorker,mediaDevices,onLine,userAgent,language.location— про текущий URL: парсинг, навигация.
window
window.innerWidth; // viewport size
window.devicePixelRatio; // retina или нет
window.scrollY;
window.scrollTo({ top: 0, behavior: 'smooth' });
// Размер экрана (физический)
screen.width;
screen.height;
// Таймеры — на самом деле часть Web API, не JS
setTimeout(fn, 100);
setInterval(fn, 1000);
requestAnimationFrame(fn);
// Алерты — синхронные, блокируют event loop. НЕ использовать в проде
alert('hi');
confirm('sure?');
prompt('name?');
navigator
navigator.onLine; // boolean (не на 100% надёжен)
navigator.language; // 'en-US'
navigator.languages; // ['en-US', 'ru']
navigator.userAgent; // длинная исторически грязная строка
navigator.userAgentData; // современная замена (Chromium)
await navigator.clipboard.writeText('hello');
navigator.geolocation.getCurrentPosition(cb);
navigator.serviceWorker.register('/sw.js');
await navigator.mediaDevices.getUserMedia({ video: true });
navigator.storage.estimate; // { quota, usage } в байтах
await navigator.storage.getDirectory; // OPFS root
navigator.locks.request('sync', cb); // Web Locks
location
location.href; // 'https://example.com/path?q=1#a'
location.protocol; // 'https:'
location.host; // 'example.com:443'
location.hostname; // 'example.com'
location.port; // '443'
location.pathname; // '/path'
location.search; // '?q=1' (см. URLSearchParams)
location.hash; // '#a'
location.origin; // 'https://example.com'
// Навигация
location.href = '/new'; // как клик по ссылке
location.assign('/new'); // = location.href = ...
location.replace('/new'); // без записи в history
location.reload; // F5
// Парсинг произвольного URL
const u = new URL('https://example.com/x?a=1');
u.searchParams.get('a'); // '1'
Слушать online/offline
window.addEventListener('online', () => console.log('back'));
window.addEventListener('offline', () => console.log('lost'));
// navigator.onLine — снапшот, события — переходы
Подводные камни
userAgent— исторический мусор, спуфится. Для feature detection не использовать →'feature' in navigatornavigator.onLineлжёт:trueесли есть соединение с роутером, не с интернетомlocation.href = urlблокирует JS — успей сохранить state перед навигацией- В Service Worker нет
window,location— но естьself,location(URL самого SW) alert/confirm/promptсинхронны и тормозят setInterval-счётчики
Используется в bootcamp
- Везде —
location.pathnameдля роутинга,navigator.onLineдля offline-индикатора,window.matchMediaдля responsive
Ссылки
🎓 Источники
- 🎓 JavaScript в браузере: Web API (часть 1) · TimurShemsedinov · 2019-10-10
locationработает как URL-parser: автоматически парсит наprotocol/host/search/hash.navigator.onLine— булево, в navigator такжеgeolocation,battery,language.- UserAgent — исторический хлам: «mozilla / apple webkit / gecko / chrome / safari» всё в одной строке.
alert/confirm/promptсинхронны и блокируют event loop, никогда не использовать кроме отладки.- Таймеры (
setTimeout/setInterval) — часть Web API, не JS-движка.