在Webkit中读取window.history.state对象

时间:2011-12-08 23:22:33

标签: javascript html5 safari webkit browser-history

Safari和Chrome(我猜,所有Webkit浏览器)都不响应{* 1}},这是在不断发展的HTML5标准here中指定的,并在Firefox中实现。

有解决方法吗?也许可以在代码中触发popstate事件并从事件处理程序返回状态?

2 个答案:

答案 0 :(得分:4)

昨天我遇到了这个问题。我不需要跨浏览器解决方案,因为目标平台运行的是旧版本的WebKit,因此我在WebKit中为history.state创建了一个快速简单的polyfill:

// Polyfill for history.state in older webkit engines
if (!history.hasOwnProperty('state')) {
    (function (push, rep) {
        // history.state is always initialised to null
        history.state = null;

        history.pushState = function (state) {
            push.apply(history, arguments);

            history.state = state;
        };
        history.replaceState = function (state) {
            rep.apply(history, arguments);

            history.state = state;
        };

        window.addEventListener('popstate', function (e) {
            history.state = e.state;
        }, true);

    })(history.pushState, history.replaceState);
}

答案 1 :(得分:2)

window.history.state目前尚未在webkit broswers中实现。它有一个request,但到目前为止还没有实施任何步骤。

有一个名为history.js的项目,旨在提供交叉兼容的历史管理体验。

  

History.js在所有浏览器中优雅地支持HTML5历史/状态API(pushState,replaceState,onPopState)。包括对数据,标题,replaceState的持续支持。支持jQuery,MooTools和Prototype。对于HTML5浏览器,这意味着您可以直接修改URL,而无需再使用哈希。对于HTML4浏览器,它将恢复使用旧的onhashchange功能。

从该项目开始,History.getState()似乎做了所要求的事情。