Я хотел бы использовать функцию window.history.pushState()
для поддержки браузеров. К сожалению, я получаю сообщение об ошибке в Firefox:
TypeError: history.pushState не является функцией
Как можно избежать этого?
Я хотел бы использовать функцию window.history.pushState()
для поддержки браузеров. К сожалению, я получаю сообщение об ошибке в Firefox:
TypeError: history.pushState не является функцией
Как можно избежать этого?
[try-catch] подразумевает, что вы уже знаете ответ... (есть ли что-то более конкретное?)
Другая возможность - проверить if ( history.pushState ) history.pushState( {}, document.title, location.href );
Хотя я не тестировал его в JavaScript, я знаю на других языках, что try-catch более ресурсоемкий, чем простой, если...
Использование:
if(history.pushState) {
history.pushState({"id":100}, document.title, location.href);
}
Имейте в виду, что при нажатии кнопки "Назад" ничего не происходит, если вы не реализуете window.onpopstate
. Вам нужно будет передать данные, необходимые для захвата содержимого:
if(history.pushState && history.replaceState) {
//push current id, title and url
history.pushState({"id":100}, document.title, location.href);
//push new information
history.pushState({"id":101}, "new title", "/new-url/");
//this executes when you use the back button
window.onpopstate = function(e) {
alert(e.state.id);
//perhaps use an ajax call to update content based on the e.state.id
};
}
Для API истории существует прокладка. History.js использует событие hashchange HTML4 с идентификаторами фрагментов документа, чтобы имитировать API истории в старых браузерах. Если один из хэш-адресов используется в современном браузере, он использует replaceState для тихого исправления URL.
Если вы не обеспокоены тем, что он не работает в старых браузерах, и вы просто хотите использовать его, не выкидывая ошибку, я делаю это...
window.history && window.history.pushState && window.history.pushState("", "", url);
Это проверяет, существует ли история и функция pushstate, прежде чем пытаться ее использовать.