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

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

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


person jamix    schedule 02.05.2013    source источник


Ответы (1)


Да - на их сайте написано:

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

Эти различия невелики, и поиска в Google было недостаточно, чтобы их найти - мне пришлось заглянуть в исходный код - похоже, что основная из них - исправление функциональности HTML5 в Safari. Есть две проблемы с реализацией safari: первая состоит в том, что 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.

person Hayden Crocker    schedule 03.05.2013
comment
Спасибо за полезные исследования. Ошибки Safari не помеха для нас, поэтому мы придерживаемся нативной версии window.history. Однако есть различия между браузерами (наиболее заметным из них является когда window.onpopstate вызывается), поэтому нам пришлось закодировать их. - person jamix; 04.05.2013