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