pushState & popState: Safari 5 не возвращает window.history.state

Я не могу получить доступ к объекту window.history.state, когда мой popState запущен в Safari 5 (страница возвращается). Этот код прекрасно работает в Chrome 19 и Firefox 12.

window.onload = function() {

     window.setTimeout(function() {

          var original = window.location.href;

          window.addEventListener("popstate", function(e) {

                    if (window.history.state !== null) {
                        var type = window.history.state.type;
                        var page = window.history.state.page;
                        //custom Ajax function below
                        getContent({type:type, page:page, category: category}, '/' + type + '/' + page);
                    } else {
                        window.location = original;
                    }

            }, false);

     }, 1);
}

console.log (window.history.state) в Safari 5 возвращает "неопределенный".

2 ответа

Решение

window.history.state доступно только в некоторых браузерах. Это не часть спецификации как таковой.

Feature           │ Chrome  │ Firefox (Gecko)  │  IE  │ Opera  │ Safari
──────────────────┼─────────┼──────────────────┼──────┼────────┼───────
replace/pushState │   5     │    4.0 (2.0)     │  10  │ 11.50  │  5.0
history.state     │  18     │    4.0 (2.0)     │  10  │ 11.50  │  ---

Так что, если history.state поддерживается, то значение будет нулевым (или объектом, если браузер запоминает состояние), в противном случае оно будет неопределенным. И я закончил с этим кодом, чтобы проверить, поддерживается ли он или нет

(window.history && history.pushState && history.state !== undefined) 
? true : false;

Протестировано в последних версиях Chrome, Safari 5, 6, IE 9

Другие вопросы по тегам