Чтение объекта window.history.state в Webkit - PullRequest
2 голосов
/ 09 декабря 2011

Safari и Chrome (и, я полагаю, все браузеры Webkit) не отвечают на window.history.state, который указан в развивающемся стандарте HTML5 здесь и реализован в Firefox.

Есть ли обходной путь, чтобы прочитать это?Возможно, можно вызвать событие popstate в коде и вернуть состояние из обработчика события?

Ответы [ 2 ]

4 голосов
/ 21 июня 2013

Я столкнулся с этим вопросом вчера.Мне не требовалось кросс-браузерное решение, поскольку на целевой платформе установлена ​​устаревшая версия WebKit, поэтому я создал быстрый и простой полифил для history.state в WebKit:

// 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);
}
2 голосов
/ 09 декабря 2011

window.history.state в настоящее время не реализовано в веб-броузерах. Для этого существует запрос , но никаких шагов по реализации пока не сделано.

Существует проект под названием history.js , целью которого является обеспечение кросс-совместимого опыта управления историей.

History.js изящно поддерживает API истории / состояния HTML5 (pushState, replaceState, onPopState) во всех браузерах. Включая постоянную поддержку данных, заголовков, replaceState. Поддерживает jQuery, MooTools и Prototype. Для браузеров HTML5 это означает, что вы можете изменить URL-адрес напрямую, без необходимости больше использовать хэши. Для браузеров HTML4 он вернется к использованию старой функциональности onhashchange.

Из этого проекта History.getState(), кажется, делает то, что запрашивается.

...