История javascript onpopstate

Я пытаюсь понять объект истории HTML5. Вот простой пример, с которого я начал.

    function addDialog(){
         document.getElementById('d').style.display ='';
         history.pushState({name:"changed"},"","#newURL");
    }

    window.onpopstate = function(e){  
        alert(e.state);
    }

у меня есть div с идентификатором d для которого display свойство none, При нажатии на ссылку, я буду отображать div и изменить историю, так что новый URL будет загружен.

Когда я копирую вставить новый URL, popstate событие происходит, и я получаю null за e.state,

Из того, что я понимаю, если я загружаю новый URL http://example.com#newURL, e.state должен указывать на объект, который я нажал с помощью pushstate.

Пожалуйста, поправьте меня, если я ошибаюсь, а также я хотел бы знать, когда e.state заселяется.

1 ответ

Решение

Как я тестировал, e.state получает только всплывающее состояние, которое вы добавляете в историю, когда нажимаете кнопку "Назад" или "Вперед". Иначе это даст вам ноль.

Вы можете использовать параметры для своего URL, чтобы вы могли проверить, поступил ли запрос от хронологического вызова или от URL в адресной строке.

onpopstate = function(event) {
    alert('popEvent: ' + event);
    if(event.state){
        setupPage(event.state);
    } else {
        setupPage(getQStringParam('zid'));
    }
}
Другие вопросы по тегам