JS об'єкт History


Об'єкт History

Об'єкт History є частиною Web API і представляє сессійну історію навігації користувача на веб-сайті. Завдяки цьому об'єкту можна програмно переміщуватися по історії сторінок браузера, а також додавати нові записи до історії.

Основні властивості та методи

Властивість length вказує на кількість сторінок у сессійній історії навігації.

let totalPages = history.length;
console.log(`В історії `{totalPages} сторінок.`);

У цьому прикладі ми отримуємо загальну кількість сторінок, які користувач відвідав під час поточної сессії в браузері.

Метод back() дозволяє перевести користувача на попередню сторінку в історії, якщо така існує.

function goBack() {
    history.back();
}

Використовуючи кнопку на веб-сторінці, яка викликає функцію goBack(), користувач може легко повернутися на попередню сторінку.

Якщо користувач вже використовував метод back() і перейшов на попередню сторінку, то метод forward() дозволить повернутися до наступної сторінки в історії.

function goForward() {
    history.forward();
}

Ця функція буде корисною, наприклад, для кнопки "Вперед" на вашому сайті.

автор: Bond

Робота з історією: додавання та модифікація записів

Давайте розглянемо, як активно взаємодіяти з історією браузера, додаючи, змінюючи або слідкуючи за змінами записів. Ці можливості особливо корисні для односторінкових застосунків (Single Page Applications), де зміни контенту сторінки відбуваються без перезавантаження сторінки.

Метод pushState() додає запис до історії браузера без перезавантаження сторінки. Це дозволяє зберігати історію навігації користувача всередині одного застосунку.

history.pushState({id: 'page2'}, 'Page 2', '/page2.html');

Виконуючи цей код, ми додали запис до історії, який вказує на URL /page2.html. При цьому реального переходу на цю сторінку не відбувається. Замість цього в історії браузера з'являється новий запис, і користувач може використовувати кнопки "Назад" та "Вперед" для навігації.

Іноді потрібно змінити інформацію в поточному записі історії, замість додавання нового. Для цього існує метод replaceState().

history.replaceState({id: 'page3'}, 'Page 3', '/page3.html');

Якщо користувач знаходиться на URL /page2.html, цей метод замінить поточний запис на /page3.html, але при цьому користувач фізично залишиться на сторінці /page2.html.

Подія popstate:

Ця подія є ключовою для слідкування за змінами в історії браузера. Коли активний запис історії змінюється (через кнопки "Назад", "Вперед" або програмно через back() і forward()), викликається подія popstate.

window.addEventListener('popstate', function(event) {
    if (event.state && event.state.id) {
        console.log(`Перехід до сторінки з ID: `{event.state.id}`);
    }
});

Тут ми слідкуємо за змінами в історії. Коли користувач перемикається між записами історії, ми аналізуємо об'єкт стану і виводимо ID поточної сторінки.

Обмеження і особливості:

Працюючи з методами pushState() та replaceState(), важливо пам'ятати про обмеження. Браузери мають ліміт на кількість записів, які можна додати в історію за короткий час. Це робиться для того, щоб веб-сторінки не могли зловживати історією браузера. Тому рекомендується використовувати ці методи розумно та обережно.

автор: Bond

Порада

Хоча більшість сучасних браузерів підтримують History API, завжди перевіряйте підтримку, особливо якщо ваша аудиторія включає старіші версії браузерів.

автор: Bond
Нотатка

Надмірне додавання записів в історію може спричинити незручності для користувача. Наприклад, якщо ви додаєте новий запис при кожній зміні фільтра, користувачу може знадобитися багато кліків, щоб повернутися на попередню сторінку.

автор: Bond
Нотатка

Якщо ви активно використовуєте History для додавання записів, зверніть увагу, щоб не створити "цикл", коли користувач намагається повернутися назад, але завжди перенаправляється на ту ж сторінку.

автор: Bond

Синтаксис

history.back();
history.forward();
history.go(value);

методи

Метод Опис
back Повертає користувача на одну сторінку назад у історії браузера.
forward Дозволяє переміщуватися вперед у історії перегляду браузера.
go Переміщує користувача на вказану кількість сторінок вперед або назад у історії браузера.

властивості

Властивість Опис
length Показує кількість елементів у стеку історії браузера.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
1 1 1 3 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

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

У односторінкових застосунках (SPA) вміст сторінки часто змінюється динамічно. Щоб користувач міг навігуватися між різними сторінками SPA та зберігати можливість переходу "назад" у браузері, можна використовувати history.pushState().

function navigateToPage(pageId) {
  // Зміна вмісту сторінки
  loadPageContent(pageId);
  // Додавання запису в історію
  history.pushState({id: pageId}, `Page ${pageId}`, `/page${pageId}.html`);
}
автор: Bond

Якщо користувач обновить сторінку або перейде за зовнішнім посиланням, потім повернеться назад, можна використовувати подію popstate для відновлення стану застосунку.

window.addEventListener('popstate', function(event) {
  if (event.state && event.state.id) {
    loadPageContent(event.state.id);
  }
});
автор: Bond

Іноді корисно змінити URL без фактичного переходу на нову сторінку. Це може бути корисно, наприклад, при зміні режиму відображення застосунку або фільтрації контенту.

function updateViewMode(mode) {
  // Зміна режиму відображення
  changeMode(mode);
  // Заміна поточного URL без додавання нового запису в історію
  history.replaceState({mode: mode}, `Mode ${mode}`, `/mode/${mode}`);
}
автор: Bond

Коментарі

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

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

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

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

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

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

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

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

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

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

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