Назначение для document.location.href без истории ударов - PullRequest
10 голосов
/ 14 мая 2009

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

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

Ответы [ 6 ]

11 голосов
/ 17 сентября 2009

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

вместо

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

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

function onAjaxCallback(evt){
    setTimeout(function(){
        location.href=newLocation;
    },0)
}
4 голосов
/ 14 мая 2009

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

window.location.replace(new_url);

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

Справка:

2 голосов
/ 31 мая 2010

исследование: window.location.replace() и window.location.assign()

1 голос
/ 25 ноября 2016

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

if (window.history) {
    history.pushState({}, window.location.href);
}
window.location.replace("/login/?next=" + window.location.pathname);
1 голос
/ 30 октября 2009

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

0 голосов
/ 15 мая 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...