History.js与window.history的HTML5-only模式

时间:2013-05-02 10:31:07

标签: html5 browser-history pushstate history.js html5-history

如今,History.js是否比HTML5的window.history提供了任何实质性的优势?我们对支持/回退HTML4 hashbang网址不感兴趣。

History.js doesn't support anchors in pushState(),而window.history。我们需要这个功能,所以如果没有很大的理由在HTML5-only模式下使用History.js而不是原生window.history,我们宁愿选择后者。

1 个答案:

答案 0 :(得分:3)

是的 - 在他们的网站上他们说:

  

为所有HTML5浏览器提供交叉兼容的体验(他们都实现HTML5>历史API有点不同导致不同的行为,有时会出现错误 - > History.js修复此问题,确保体验符合预期/相同/伟大的整个> HTML5浏览器)

这些差异很小,谷歌搜索还不足以找到它们 - 我不得不查看源代码 - 似乎主要是在Safari中修复HTML5功能。 safari实现有两个问题 - 一个是history.back无法返回到由location.hash设置的哈希状态,后来由history.replaceState替换。

第二种是当繁忙的safari无法应用状态更改时。

相关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。