История страницы - кнопка назад существует? - PullRequest
14 голосов
/ 11 июня 2009

Можно ли проверить, есть ли значение для history.go (-1)? Я знаю, что вы не можете получить доступ к history.previous напрямую.

Я пытаюсь держаться подальше от document.referrer, потому что знаю, что в некоторых случаях его можно заблокировать.

Вот что я пытаюсь сделать. У меня есть страница с ошибкой, на этой странице я бы хотел иметь кнопку НАЗАД (если это не единственный элемент в истории) или кнопку закрытия (если она есть).

Ответы [ 5 ]

20 голосов
/ 11 июня 2009
if (history.length) {
    //There is history to go back to
    history.go(-1);
}    
12 голосов
/ 27 мая 2011

На самом деле, history.length всегда один или несколько, так как текущая страница имеет значение. Кроме того, если у вас есть история пересылки (то есть вы использовали кнопку «Назад»), эти страницы также учитываются. Так что вам нужна более сложная проверка:

if( (1 < history.length) && document.referrer ) {
2 голосов
/ 06 сентября 2016

Нет кросс-браузерного подхода для достижения этой цели. Document.Referrer может быть установлен, даже если запись истории не существует.

Я придумал следующий "хак". Он использует событие onbeforeunload, чтобы определить, начинает ли браузер покидать страницу или нет. Если этого не произойдет в определенный промежуток времени, он просто перенаправит на запасной вариант.

window.goBack = function goBack(fallback){
  var useFallback = true;
  window.onbeforeunload = function(){
    useFallback = false;
  }
  window.history.back();

  setTimeout(function(){
    if (useFallback){ window.location.href = fallback; }
  }, 100); 
}

Вы можете вызвать эту функцию, используя goBack("fallback.example.org").

Одним из вариантов использования является то, что вы можете добавить кнопку «Назад» на любую страницу, а также убедиться, что эта кнопка «Назад» работает, даже если пользователь переходит непосредственно на эту страницу (например, по закладке, прямой ссылке и т. Д.) .

Так что либо он выполняет history.back (), либо, если запись отсутствует, он будет перенаправлен на запасной вариант.

2 голосов
/ 11 июня 2009

Если история имеет длину больше 0, то она содержит хотя бы одну точку истории.

if (history.length)
0 голосов
/ 08 июля 2013
 function test() {
        document.URL = document.referrer;            
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...