2013-05-02 6 views
2

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

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

ответ

2

Да - на их сайте они говорят:

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

эти различия невелики, и не прибегая к помощи было достаточно, чтобы найти их - я должен был искать в исходном коде - похоже, что основной является фиксация функциональности 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.

+0

Спасибо за полезное исследование. Ошибки Safari не являются для нас разбойниками, поэтому мы придерживаемся собственной 'window.history'. Однако существуют различия браузера (наиболее примечательным является [когда вызывается 'window.onpopstate'] (http://stackoverflow.com/questions/3700440/html5-onpopstate-on-page-load)), поэтому мы имеем должен был кодировать вокруг них. – jamix