美文网首页
页面历史栈相关

页面历史栈相关

作者: jluemmmm | 来源:发表于2021-03-09 20:55 被阅读0次

针对页面历史栈相关的事件,需要进行一个深入的学习,针对一个具体的业务场景,记录下对应的解决方案:

场景记录:

有三个页面 ABC,其中AB两个页面之间的数据可以同步,通过点击A页面的一个按钮,进入到B页面,点击客户端或者手机物理返回键的时候,可以从B页面返回A页面,点击A和B页面的一个按钮,进入到C页面,无论是从A页面进入C页面,还是从B页面进入到C页面,从C页面返回的时候,需要返回到A的上一级页面。(这里A的上一级页面进入到A的时候,是调用客户端的)

经过实践,一个比较简单的实现方式是:

A和B页面的逻辑,写入到一个html里面,页面的切换和数据同步通过观察者模式和component组件的显示和隐藏实现。在从A页面进入到B页面的过程中,调用history.pushState(null, null, url),同时监听页面的 popstate 事件,在window.addEventListener('popstate', () =>{}) 的回调里进行页面的显示和隐藏。C页面最终要回到A的上级页面,如果是在B页面提交,需要在提交成功的情况下,调用history.back()方法回到A页面,然后使用 location.replace(url)方法进入到C页面,这个时候从C页面点击再返回,可以直接将当前的webview销毁,回退到A的上一级页面。

针对 history历史事件的重写,部分域名的页面切换监听不到相关的历史事件, 重写 history 等事件监听页面切换。

 var _history = function(type) {
    var origin = history[type]
    return function() {
      var rv = origin.apply(this, arguments)
      var e = new Event(type)
      e.arguments = arguments
      window.dispatchEvent(e)
      return rv
    }
  }

  history.pushState = _history('pushState')
  history.replaceState = _history('replaceState')
  history.popState = _history('popState')

  window.addEventListener('replaceState', function (e) {
    EventEmit.instance.emit( params.host + '-history-replacestate')
  })

  window.addEventListener('pushState', function (e) {
    EventEmit.instance.emit( params.host + '-history-pushstate')
  })

  window.addEventListener('popstate', function(e) {
    EventEmit.instance.emit( params.host + '-history-popstate')
  })

相关文章

  • 页面历史栈相关

    针对页面历史栈相关的事件,需要进行一个深入的学习,针对一个具体的业务场景,记录下对应的解决方案: 场景记录: 有三...

  • 小程序路由

    页面栈 页面栈保存页面的路由 页面跳转,便把该页面的压入栈 页面重定向,取代栈顶页面 页面返回,页面出栈 Tab切...

  • Flutter/Native混合工程页面跳转

    这篇文章介绍Flutter页面的入栈出栈方式、Flutter页面和Native页面互相跳转的方法,以及混合页面栈的...

  • vue编程式导航

    导航是根据历史记录栈来进行前进后退页面的匹配 methodes:{方法(){this.route.replace(...

  • 微信小程序之页面间传值(二)页面栈

    页面栈是以栈的形式维护页面与页面之间的关系,遵循栈的原则,先进后出,在微信小程序中有getCurrentPages...

  • 微信小程序系列3——页面跳转详解

    前言   首先,微信页面跳转的是一个页面栈进栈出栈的过程,也可以简单的理解对页面跳转的操作就是一个栈的操作。 微信...

  • react-navigation stackNavigator组

    安装 StackNavigator是一个用到了栈概念的导航器,每一个新页面会被放到栈顶,回退页面会移除栈顶页面。 ...

  • SAP Spartacus B2B ListComponent响

    SAP Spartacus B2B的List页面: 和回车键事件相关的实现: 调用栈:观察lock-focus.d...

  • 微信小程序页面栈

    通过getCurrentPages() 获取一个页面栈数组,取出上个页面栈然后使用 setData()方法赋值 导...

  • Flutter学习记录-页面跳转

    flutter的页面跳转主要靠Navigator 首先要有一个页面栈的概念,而Navigator就是用来控制页面栈...

网友评论

      本文标题:页面历史栈相关

      本文链接:https://www.haomeiwen.com/subject/cufdqltx.html