У веб-розробці часто виникає потреба програмно керувати адресою сторінки: перенаправити користувача на сторінку входу, оновити контент без дій користувача або отримати параметри з URL для фільтрації товарів.
Для цього браузер надає глобальний об'єкт window.location (або просто location). Це спеціальний об'єкт, який містить повну інформацію про поточний URL документа та надає методи для навігації.
location та клас URL мають схожі властивості, вони служать різним цілям. URL використовується для парсингу та створення будь-яких посилань, тоді як location завжди прив'язаний до поточної сторінки та дозволяє керувати браузером.Об'єкт location автоматично розбирає поточну адресу на складові частини.
Всі властивості location (крім origin) доступні для запису. Зміна будь-якої з них призведе до негайного оновлення сторінки або навігації.
http:, https:)./).?.#.protocol + // + host.// Поточний URL: https://example.com/blog/article?id=42#comments
console.log(location.href) // "https://example.com/blog/article?id=42#comments"
console.log(location.origin) // "https://example.com"
console.log(location.pathname) // "/blog/article"
console.log(location.search) // "?id=42"
console.log(location.hash) // "#comments"
Крім прямаго запису у location.href, існують спеціальні методи для більш точного керування навігацією.
location.assign(url)Цей метод завантажує новий документ за вказаною URL-адресою.
// Перехід на головну Google
location.assign('https://google.com')
location.href = 'url' працює ідентично до location.assign('url').location.replace(url)Замінює поточний документ новим.
// Користувач не зможе повернутися на попередню сторінку
location.replace('https://google.com')
Коли використовувати? Ідеально підходить для редіректів після логіну, або коли сторінка, на якій зараз знаходиться користувач, більше не актуальна (наприклад, проміжна сторінка оплати).
location.reload()Перезавантажує поточну сторінку.
location.reload() — перезавантажує, використовуючи кеш браузера (якщо він валідний).true, щоб ігнорувати кеш, але в сучасному стандарті цей аргумент ігнорується. Для "жорсткого" перезавантаження часто покладаються на заголовки сервера або мета-теги.// Перезавантажити сторінку
location.reload()
Найпоширеніша задача — редірект. Наприклад, якщо користувач не авторизований.
function checkAuth() {
const isAuthorized = Boolean(localStorage.getItem('token'))
if (!isAuthorized) {
// Використовуємо replace, щоб користувач не міг повернутися
// на захищену сторінку кнопкою "Назад"
location.replace('/login')
}
}
Хоча location.search повертає просто рядок, його зручно використовувати разом з URLSearchParams.
// URL: https://shop.com/search?q=iphone&sort=price
const params = new URLSearchParams(location.search)
const query = params.get('q') // "iphone"
const sort = params.get('sort') // "price"
console.log(`Пошук: ${query}, Сортування: ${sort}`)
Можна змінювати окремі властивості, наприклад hash. Це часто використовується в SPA (Single Page Applications) або для навігації по сторінці, і не викликає перезавантаження сторінки (тільки подія hashchange).
// URL: https://site.com/page
location.hash = 'footer'
// URL стане: https://site.com/page#footer
// Сторінка проскролиться до елемента з id="footer"
Але зміна search або pathname призведе до перезавантаження.
// Це перезавантажить сторінку!
location.search = '?lang=ua'
history.pushState), а не location.| Метод / Властивість | Зберігає в історії? | Опис |
|---|---|---|
location.href = '...' | ✅ Так | Стандартний перехід, аналог кліку по посиланню |
location.assign('...') | ✅ Так | Те саме, що і href = ..., але виглядає як явний виклик методу |
location.replace('...') | ❌ Ні | Замінює поточний запис. Кнопка "Назад" не поверне сюди |
location.reload() | - | Оновлює поточну сторінку |
Будьте обережні при роботі з даними з location, особливо якщо виводите їх на сторінку.
location.search або location.hash напряму в HTML через innerHTML, оскільки зловмисник може сформувати шкідливе посилання.// ❌ НЕБЕЗПЕЧНО!
// URL: site.com?name=<script>alert(1)</script>
document.body.innerHTML = `Привіт, ${new URLSearchParams(location.search).get('name')}`
// ✅ БЕЗПЕЧНО
document.body.textContent = `Привіт, ${new URLSearchParams(location.search).get('name')}`
Браузерне оточення
location — це ваш місток для взаємодії з адресним рядком браузера. Він дозволяє читати поточний стан і змінювати його.Навігація
assign() для звичайних переходів і replace() для редіректів, де не потрібна історія (наприклад, після логіну).Властивості
host, pathname, search та інші властивості дозволяють легко читати структуру URL без ручного парсингу рядків.SPA & History
location викликає перезавантаження. Для динамічних застосунків краще підходить History API.LocalStorage, SessionStorage та patterns збереження даних
Детальний посібник з Web Storage API. Більше 10 реальних паттернів використання (Auth, Caching, Theming, State Sync) та архітектурні рішення.
History API - Керування історією браузера
Повний посібник з History API. Як створювати Single Page Applications, керувати навігацією без перезавантаження, працювати з state об'єктом та будувати власні роутери.