【问题标题】:Get the last hash after the hash has changed获取哈希更改后的最后一个哈希
【发布时间】:2023-04-02 00:48:01
【问题描述】:

我有一个主干应用程序,我想在其中打开一个覆盖,它只是一个带有其 url 的页面。您还可以使用不同的页面/网址在此叠加层中导航。因此,当覆盖层关闭时,我想将散列设置回覆盖层打开之前的状态。由于覆盖是通过链接打开的,因此我无法从之前的状态中获取哈希值。

那么有没有办法在哈希改变时获取上一个哈希?

【问题讨论】:

    标签: javascript backbone.js browser-history


    【解决方案1】:

    hashchange 事件有一个“oldURL”字段......存储所有“oldURL”(或仅最后一个),并在需要时使用最后一个 url 更改实际 url。

    来源:https://developer.mozilla.org/en/DOM/window.onhashchange

    【讨论】:

    • 保存oldUrl 并通过window.location.replace(oldUrl) 回到旧位置是要走的路。谢谢。
    【解决方案2】:

    我想出了这个小技巧。当覆盖打开时,我存储window.history.length。当覆盖层关闭时,我调用 window.history.go 存储长度与实际长度之间的差异并减去 1。

    var appStateActions = {
      overlayPre: function(){
        this.historyPosition = window.history.length;
      },
      overlayExit: function(){
        window.history.go(this.historyPosition - window.history.length -1);
      }
    }
    

    不幸的是,由于历史的限制,这不起作用。所以当你达到历史长度的限制后,你会得到一个错误的结果。

    【讨论】:

      【解决方案3】:
      var historyurl =[];
      
      $(window).on('hashchange', function(e){
          historyurl.push(location.hash); 
         if(historyurl.length > 2){ 
             historyurl.splice(0,historyurl.length-2)
           }; 
      });
      
      console.log("Last Hah Url ="+historyurl[0])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-16
        • 2021-01-26
        • 2010-12-19
        • 1970-01-01
        • 2017-05-11
        • 2013-09-27
        • 1970-01-01
        • 2019-07-04
        相关资源
        最近更新 更多