Поддержка методов pushState и replaceState в IE9

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Поддержка методов HTML5 pushState и replaceState в браузере Internet Explorer включена с версии IE10 вверх. Эти методы позволяют производить изменения URL без полной перезагрузки страницы:

JS
Скопировать код
// Добавление новой записи в историю браузера
history.pushState(null, "Название страницы", "new-page.html");

// Обновление текущей записи в истории
history.replaceState(null, "Обновленное название", "new-page-2.html");

Однако в IE9 и более ранних версиях поддержка недоступна. В данной ситуации можно использовать полифилл для решения проблемы.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Углубление в процесс работы с историей браузера

Методы history.pushState и replaceState играют ключевую роль в процессе навигации основанной на AJAX, предоставляя способность поддерживать пользовательский интерфейс веб-приложений актуальным без необходимости перезагрузки страниц. Удобство использования такого подхода не подлежит сомнению.

При помощи полифиллов IE9 может спасти ситуацию

Для IE9 не всё потеряно: имеются полифиллы, такие как History.js, которые имитируют функциональность современных методов, позволяя даже старым браузерам управлять изменениями URL.

Эмуляция изменения состояния при помощи History.js

Причины использования History.js в браузерах без поддержки HTML5:

  • Имитация HTML5: преобразование изменений хэша в псевдо-состояния.
  • Поддержка браузеров HTML4: решение проблемы неточности истории переходов, добавляющее запросы в URL.
  • Консистентность: обеспечение единообразного пользовательского восприятия в разных браузерах.
JS
Скопировать код
// Жизнь становится проще, когда поддерживается API истории
if (!window.history.pushState) {
    // Запасной вариант при недоступности поддержки (спасибо, History.js!)
    History.pushState(null, "Название страницы", "new-page.html");
}

Согласованность в различных версиях браузеров

Важно, чтобы веб-приложения функционировали одинаково хорошо во всех браузерах, предназначенных для использования целевой аудиторией. Это подразумевает проверку поддержки API истории и разработку плана по внедрению обходных решений для старых версий браузеров, таких как IE9.

Визуализация

Схематичное изображение поддержки pushState и replaceState:

Markdown
Скопировать код
Internet Explorer          Современные браузеры
     🚫                               ✅
┌─────────────────┐      ┌─────────────────┐
│  pushState      │      │  pushState      │
│  replaceState   │      │  replaceState   │
└─────────────────┘      └─────────────────┘

Вкратце, Internet Explorer способен только обновлять страницы (🅿️), в то время как современные браузеры предлагают плавную навигацию без необходимости полной перезагрузки (⚙️🔄).

Детали API истории браузера

Проверка поддержки на CanIUse

CanIUse — это инструмент, благодаря которому можно отследить совместимость браузеров. Поиск по запросу "history.pushState" или "history.replaceState" покажет, какие версии Internet Explorer поддерживают эти методы.

Осторожнее с использованием относительных путей

В некоторых случаях проблемы с pushState() могут быть решены правильным использованием относительных путей для корректной работы с URL и обеспечением должного перемещения по навигации.

Инструмент для определения совместимости: Modernizr

Отдельно стоит упомянуть инструмент Modernizr, который помогает определить уровень поддержки различных функций браузера. Он облегчает загрузку полифиллов и обеспечивает согласованность функциональности между различными браузерами.

Полезные материалы

  1. Can I use... Support tables for HTML5, CSS3, etc — здесь можно проверить поддержку HTML5 pushState и replaceState различными браузерами.
  2. History – Web APIs | MDNподробная документация по API истории, предоставленная Mozilla.
  3. GitHub – browserstate/history.js — полифилл History.js для старых браузеров, поддерживающий pushState и replaceState.
  4. Implementing the Model-View-ViewModel pattern for Windows Phone 8 | Microsoft Learn — описание исторического контекста управления состоянием в приложениях для платформ Microsoft.
  5. Feature Detection Script for Replace/PushStateскрипт для проверки поддержки pushState и replaceState различными браузерами.