JavaScript window.history — історія переходів браузера


Об'єкт history дає доступ до історії переходів вкладки: назад, вперед і — найцікавіше — зміна адреси без перезавантаження.

автор: NagarD

Загальний опис

Методи back() і forward() роблять те саме, що кнопки браузера.

Але по-справжньому важливий тут pushState(). Він змінює адресу в рядку браузера, не перезавантажуючи сторінку — і саме на цьому побудовані всі односторінкові застосунки: вміст підмінюється кодом, а адреса лишається чесною, її можна скопіювати й надіслати.

Коли користувач тисне «Назад», спрацьовує подія popstate — і застосунок має сам відновити попередній стан. Забув обробник — і кнопка «Назад» просто перестане працювати, що бісить людей найбільше.

replaceState() не додає запис, а замінює поточний — зручно, коли міняється лише фільтр, і засмічувати історію не варто.

автор: NagarD

Нотатка

З міркувань приватності прочитати історію не можна: не існує способу дізнатись, де користувач був раніше. Доступна лише довжина — history.length.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
history 5+ 4+ 5+ 11.5+ 12+ 10+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
history 4.4+ yes yes 5+

Приклади

+ запропонувати свій приклад у пісочниці

Адреса змінюється без перезавантаження, «Назад» працює.

function render(page) {
    console.log('Малюємо сторінку', page);
}

try {
    // змінили адресу, сторінку не перезавантажили
    history.pushState({ page: 2 }, '', '?page=2');

    // без цього обробника кнопка «Назад» зламається
    window.addEventListener('popstate', event => {
        const page = (event.state && event.state.page) || 1;
        render(page);
    });

    // фільтр змінився — історію не засмічуємо
    history.replaceState({ page: 2, sort: 'new' }, '', '?page=2&sort=new');

    history.back(); // як кнопка «Назад»
} catch (error) {
    console.log('У пісочниці зміна історії заборонена:', error.name);
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід