Получить URL последней страницы из объекта истории - кросс-браузер?

Привет, ребята - простой вопрос без простого ответа для меня еще:)

Можно ли получить URL последней страницы из объекта истории? Я прошел через историю.предыдущий, но это либо не определено, либо защищено от того, что я видел

3 ответа

Решение

Не из history объект, но из document.referrer, Если вы хотите получить последнюю фактическую страницу, к которой вы обращались, нет кросс-браузерного способа без отдельного случая, основанного на поддержке каждого свойства.

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

Вы можете написать Browser Helper Object для IE и других браузеров, которые предоставляют вам доступ к этому. (Аналогично панели инструментов Google и др.) Но это потребует от пользователей разрешения запускать это приложение на своем компьютере.

Есть некоторые неприятные способы, с помощью которых вы можете попасть в историю, используя не очень приятные способы, но я бы не советовал их. Посмотрите эту ссылку.

Конечно, как говорят, это невозможно. Однако то, что я сделал, чтобы обойти это ограничение, - это просто сохранить каждую страницу, загруженную в localStorage, чтобы вы могли создавать свою собственную историю ...

      function writeMyBrowserHistory(historyLength=3) {
  // Store last historyLength page paths for use in other pages
  var pagesArr = localStorage.myPageHistory
  if (pagesArr===null) { 
        pagesArr = [];
  } else {
        pagesArr = JSON.parse(localStorage.myPageHistory);
        pagesArr.push(window.location.pathname)  // can use whichever part, but full url needs encoding
  }
  if (pagesArr.length>historyLength) {
        // truncate the array
        pagesArr = pagesArr.slice(pagesArr.length-historyLength,pagesArr.length)
  }
  // store it back 
  localStorage.myPageHistory = JSON.stringify(pagesArr);
  // optional debug
  console.log(`my page history = ${pagesArr}`)
}

function getLastMyBrowserHistoryUrl() {
  var pagesArr = localStorage.myPageHistory
  var url = ""
  if (pagesArr!==null) { 
    pagesArr = JSON.parse(localStorage.myPageHistory);
    // pop off the most recent url
    url = pagesArr.pop()
  }
  return url
}

Итак, в js при каждом вызове страницы

      writeMyBrowserHistory()

Когда вы хотите выяснить последний вызов страницы

      var lastPageUrl = getLastMyBrowserHistoryUrl()

Примечание: localStorage хранит строки только потому, что JSON.

Сообщите мне, есть ли у меня какие-либо ошибки в коде, поскольку он был улучшен по сравнению с оригиналом.

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