Назначение для document.location.href без истории ударов

При тестировании document.location.href я заметил, что когда пользователь инициирует действие, результатом которого является JavaScript, который присваивается document.location.href, новый URL-адрес добавляется в историю.

Однако, если вызов инициируется JavaScript, который является результатом, скажем, изменения состояния XMLHTTPRequest, запись для текущей страницы в истории перезаписывается. Правильно ли я охарактеризовал это? Есть ли способ, чтобы изменение страницы было отражено в истории в этом последнем случае?

6 ответов

Решение

Я столкнулся с той же проблемой и нашел этот обходной путь, который работал для меня

вместо

function onAjaxCallback(evt){
    location.href=newLocation;
}

я обернул вызов location.href вокруг setTimeout. Кажется, чтобы сделать трюк. Моя история сейчас в порядке. надеюсь, это поможет

function onAjaxCallback(evt){
    setTimeout(function(){
        location.href=newLocation;
    },0)
}

Вы можете изменить местоположение без отображения в браузере кнопки "Назад":

window.location.replace(new_url);

Тем не менее, исходный адрес остается в истории браузера и может быть доступен с помощью чего-то вроде CTRL+H

Ссылка:

Изучение: window.location.replace() а также window.location.assign()

URL может быть добавлен в историю вручную перед перенаправлением пользователя.

if (window.history) {
    history.pushState({}, window.location.href);
}
window.location.replace("/login/?next=" + window.location.pathname);

Читайте оригинальный вопрос более внимательно. Вопрос не в контенте, загруженном XHR, а в контенте, загружаемом скриптом, загруженным XHR. У меня была та же проблема, и метод setTimeout, кажется, работает хорошо.

Увы, на ваш вопрос нельзя ответить, запросы AJAX не имеют ничего общего с историей браузера, и если вы загрузили с ними динамический контент, то пользователь нажал кнопку возврата браузера, загрузилась предыдущая страница (эта, которая была загружена с помощью обычный запрос GET или POST), который искажает последовательность отображения содержимого.

Ответ Дмитрия означает, что вы будете поддерживать свою собственную историю для динамического содержимого, используя фрагмент фрагмента URL (это после символа #), возможно, вы предоставите свои собственные кнопки назад и вперед, но все же вы не защищены от эффект браузера кнопки назад и вперед.

Если бы только они предоставили какие-то события для обработки пользовательских нажатий на эти кнопки с возможностью отмены.

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