Использование history.js с IE9

В одном из моих приложений я использую window.history.pushState() способ обновить окно URL. Но, как IE < 10 не поддерживает API истории HTML5, я искал альтернативу. Ответы на множество других вопросов по SO предлагается использовать history.js плагин.

Из документации, предоставленной плагином history.js, его использование не совсем понятно. Я добавил плагин к <head></head> раздел в моих шаблонах, но на IE9 я все еще получаю сообщение об ошибке:

SCRIPT438: Object doesn't support property or method 'pushState'
params.js, line 37 character 5

функция, которая выдает ошибки, выглядит следующим образом

/**
 * updates the window url according to the given parameters.
 */
function updateUrl(params) {
    var path = window.location.pathname;
    var url = $.param.querystring(path, params);
    url = decodeURIComponent(new_url).replace("#", "", "g");
    window.history.pushState(null, null, new_url);
}

1 ответ

Вам нужно инициализировать переменные History и State, чтобы это работало.

(function(window, undefined) {
    // Define variables
    var History = window.History,
        State = History.getState();

    // Bind statechange event
    History.Adapter.bind(window, 'statechange', function() {
        var State = History.getState();
    });
})(window)

и теперь вы можете использовать pushState Метод для всех браузеров выглядит следующим образом:

History.pushState(null, null, '?your=hash')
Другие вопросы по тегам