【问题标题】:getting last page URL from history object - cross browser?从历史对象获取最后一页 URL - 跨浏览器?
【发布时间】:2011-01-23 22:18:26
【问题描述】:

是否可以从历史对象中获取最后一页 URL?我遇到了 history.previous,但它要么未定义,要么不受我所见的保护。

【问题讨论】:

  • 有一个原因,为什么它受到保护。
  • history.previous 无论如何都是非标准属性。 MDC 表示:此属性Web 内容不可用,其他浏览器不支持。

标签: javascript


【解决方案1】:

不是来自history 对象,而是来自document.referrer。如果您想获取最后一次实际访问的页面,则没有跨浏览器的方式,除非根据对每个属性的支持情况进行单独的案例。

【讨论】:

    【解决方案2】:

    您无法在任何浏览器中访问历史记录。这将是严重的安全违规,因为这意味着任何人都可以窥探其用户的历史记录。

    您也许可以为 IE 和其他允许您访问它的浏览器编写浏览器帮助对象。 (类似于谷歌工具栏等)。但这将要求用户允许该应用程序在他们的机器上运行。

    有一些令人讨厌的方法可以使用一些“不太好”的方式来了解一些历史,但我不推荐它们。查找this link.

    【讨论】:

      【解决方案3】:

      当然,正如人们所说,这是不可能的。然而,我为了解决这个限制所做的只是将加载到 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。

      如果代码中有任何错误,请告诉我,因为它是从原始代码中美化的。

      【讨论】:

        猜你喜欢
        • 2018-11-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-01
        • 2018-02-12
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        相关资源
        最近更新 更多