Как я могу использовать window.history.pushState "безопасно"

Я хотел бы использовать window.history.pushState() функция поддержки браузеров. К сожалению, я получаю сообщение об ошибке в Firefox:

Ошибка типа: history.pushState не является функцией

Как можно этого избежать?

3 ответа

Решение

Тег [try-catch] подразумевает, что вы уже знаете ответ... (есть что-то более конкретное?) Другая возможность - проверить if ( history.pushState ) history.pushState( {}, document.title, location.href );

Хотя я не тестировал его на JavaScript, я знаю на других языках, что try-catch более ресурсоемкий, чем простой if...

Использование:

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
    };
}

Оболочка для History API существует. History.js использует событие hashchange HTML4 с идентификаторами фрагментов документа для имитации API истории в старых браузерах. Если один из хэш-URL-адресов используется современным браузером, он использует replaceState для тихого исправления URL-адреса.

Если вас не беспокоит то, что он не работает в старых браузерах, и вы просто хотите использовать его, не выдавая ошибку, я делаю это...

window.history && window.history.pushState && window.history.pushState("", "", url);

Это проверяет, что история и функция pushstate существуют, прежде чем пытаться использовать ее.

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