何小豆儿在此 发表于 2024-7-23 14:54:42

uniapp 小程序 嵌套 webview 返回需要点击两次

uniapp 小程序 嵌套 webview 返回需要点击两次


[*]先 上图
https://i-blog.csdnimg.cn/direct/53c85217ae4549eb9002afff8b445021.png
[*]小程序也监听不到 返回事件
[*]在网上找了一圈 都没有理想的答案,猜测 是由于嵌入的页面中有标题
[*]果然
小程序中嵌入的代码
        <view>
                <web-view :src="urlSrc" ></web-view>
        </view>


        export default {
                data() {
                        return {
                           urlSrc: "",
                        }
          },
          onLoad(options) {
                // 这里是要嵌入的页面路径
                        this.urlSrc = getApp().globalData.webViewUrl + "/#/viewsEdit?key=" + options.id+"&token="+options.token
                },
   }
嵌入项目 app.vue
由于我需要在该项目中先登录,再跳转到 /viewsEdit 页面 所以需要再app.vue中做默认登陆操作,然后再跳转到 /viewsEdit
<template>
<div id="app">
    <RouterView />
</div>
</template>

<script>
export default {
created() {
    // 有发送就有接收,与postMessage配套使用的就是message事件
    let that = this
    window.onload = function () {
      let datas = that.getUrlParams(window.location.href)
       localStorage.setItem('token', datas.token)
      // 登录成功后路由跳回
      // 重点
      // 重点
      // 重点
      // 此处一定要使用replace替换掉 路由栈中的记录
      // 不然 路由栈中会存在['/','/viewsEdit'] 两个记录所以需要点两次才能退出
      // 使用 replace 后 路由栈中就剩了 ['/viewsEdit']
      
      // this.$router.push({
      //path: '/viewsEdit',
      //query: {
      //   key: datas.key,
      // }
      // })
      this.$router.replace({
          path: '/viewsEdit',
          query: {
            key: datas.key,
          }
      })
    }
},
methods: {
    getUrlParams(url) {
      const params = {}
      const reg = /([^?&=]+)=([^&]*)/g
      url.replace(reg, (match, key, value) => {
      params = decodeURIComponent(value)
      })
      return params
    }
}

}
</script>

[*]搞定 , 日常记录!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: uniapp 小程序 嵌套 webview 返回需要点击两次