История страницы - существует кнопка "Назад"?

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

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

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

Ответ 1

if (history.length) {
    //There is history to go back to
    history.go(-1);
}    

Ответ 2

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

if( (1 < history.length) && document.referrer ) {

Ответ 3

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

if (history.length)

Ответ 4

Для этого не существует кросс-браузерного подхода. 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(), либо если нет записи, он перенаправляется на резерв.

Ответ 5

 function test() {
        document.URL = document.referrer;            
    }