History.js против window.history для режима только для HTML5

Предоставляет ли History.js какие-либо существенные преимущества по сравнению с HTML5? window.history Настоящее время? Мы не заинтересованы в поддержке / возвращении к URL-адресам хэш-бэндов HTML4.

History.js не поддерживает якоря вpushState(), в то время как window.history делает. Нам нужна эта функция, поэтому, если нет особых причин использовать History.js вместо нативного window.history в режиме только HTML5 мы бы предпочли последний вариант.

1 ответ

Решение

Да, на своем сайте они говорят:

Обеспечение совместимости для всех браузеров HTML5 (все они реализуют API-интерфейс HTML5 >History несколько по-разному, вызывая различное поведение, а иногда и ошибки - >History.js исправляет это, гарантируя, что опыт будет таким же, как ожидалось / одинаковым / отличным во всем> HTML5 браузеры)

Эти различия невелики, и поиск в Google не был достаточным, чтобы найти их - мне пришлось искать в исходном коде - кажется, что основным является исправление функциональности HTML5 в сафари. Есть две проблемы с реализацией сафари - одна из них заключается в том, что history.back не может вернуться в состояние хеша, установленное location.hash, которое впоследствии заменяется history.replaceState.

Второе - это то, что при занятом сафари не будет применено изменение состояния.

Соответствующий исходный код History.js:

    History.bugs = {
        /**
         * Safari 5 and Safari iOS 4 fail to return to the correct state once a hash is replaced by a `replaceState` call
         * https://bugs.webkit.org/show_bug.cgi?id=56249
         */
        setHash: Boolean(!History.emulated.pushState && navigator.vendor === 'Apple Computer, Inc.' && /AppleWebKit\/5([0-2]|3[0-3])/.test(navigator.userAgent)),

        /**
         * Safari 5 and Safari iOS 4 sometimes fail to apply the state change under busy conditions
         * https://bugs.webkit.org/show_bug.cgi?id=42940
         */
        safariPoll: Boolean(!History.emulated.pushState && navigator.vendor === 'Apple Computer, Inc.' && /AppleWebKit\/5([0-2]|3[0-3])/.test(navigator.userAgent)),

Поэтому я думаю, что ваше решение сводится к тому, заботитесь ли вы о Safari 5 и Safari IOS 4.

Другие вопросы по тегам