DEMOs

导航页

页面载入时使用history.replaceState修改history记录

利用按钮1,2修改history记录;按钮3,4,5进行前进后退测试,在history细节中查看信息

点击按钮1后,将使用history.pushState加入一条history记录

点击按钮2后,将使用history.replaceState修改当前history记录

点击按钮3后,页面将后退到前一个history记录

点击按钮4后,页面将前进一个history记录

点击按钮5后,页面将后退两个history记录

根据history细节可以发现pushState和replaceState的区别

history细节

    #history {
      .btn {
        font-size: torem(14px);
        line-height: 1.5;
        padding: 0 torem(10px);
      }
    }
    
    /**
     * 点击处理
     */
    function handleHistory(e) {
      const { trigger } = e.target.dataset;
    
      if (trigger === 'push') {
        window.history.pushState({ page: 2 }, '', '/history.html?pagetwo');
      } else if (trigger === 'replace') {
        window.history.replaceState({ page: 3 }, '', '/history.html?pagethree');
      } else if (trigger === 'back') {
        window.history.back();
      } else if (trigger === 'forward') {
        window.history.forward();
      } else if (trigger === 'go') {
        window.history.go(-2);
      }
    
      e.preventDefault();
      e.stopPropagation();
    }
    
    document.addEventListener('DOMContentLoaded', () => {
      document.querySelector('#history').addEventListener('click', handleHistory, false);
    
      window.onpopstate = (e) => {
        const li = document.createElement('li');
        const info = `location: ${document.location}; state: ${JSON.stringify(e.state)}`;
        const text = document.createTextNode(info);
    
        li.appendChild(text);
        document.querySelector('.detail').appendChild(li);
      };
    });
    
    window.onload = () => {
      window.history.replaceState({ page: 1 }, '', '/history.html?pageone');
    };