Safari和Chrome(我猜,所有Webkit浏览器)都不响应{* 1}},这是在不断发展的HTML5标准here中指定的,并在Firefox中实现。
有解决方法吗?也许可以在代码中触发popstate事件并从事件处理程序返回状态?
答案 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()
似乎做了所要求的事情。