uniapp app端webview嵌套的页面没有返回如何解决

在uniapp的app端使用webview嵌套页面时,发现没有返回按钮,导致用户无法返回上一页。请问该如何解决这个问题?是否有方法可以自定义返回按钮或者监听系统的返回事件?

2 回复

在webview页面内添加自定义返回按钮,通过uni.navigateBack()或history.back()实现返回。或使用uni-app的导航栏配置,设置返回按钮事件。


在Uniapp的App端,Webview嵌套页面没有返回按钮时,可以通过以下方式解决:

1. 自定义导航栏返回按钮

// 在pages.json中配置自定义导航栏
{
  "path": "pages/webview/webview",
  "style": {
    "navigationStyle": "custom"
  }
}

// 在webview页面添加返回按钮
<template>
  <view>
    <view class="custom-navbar">
      <view class="back-btn" @click="goBack">← 返回</view>
    </view>
    <web-view :src="url"></web-view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      url: 'https://example.com'
    }
  },
  methods: {
    goBack() {
      uni.navigateBack()
    }
  }
}
</script>

<style>
.custom-navbar {
  height: 44px;
  background: #fff;
  display: flex;
  align-items: center;
  padding: 0 15px;
  border-bottom: 1px solid #eee;
}
.back-btn {
  font-size: 16px;
}
</style>

2. 监听Android物理返回键

export default {
  onBackPress() {
    // 处理Android物理返回键
    uni.navigateBack()
    return true // 阻止默认返回行为
  }
}

3. 使用Webview的返回方法

// 获取webview实例进行控制
const webview = this.$scope.$getAppWebview()
const currentWebview = webview.children()[0]
currentWebview.canBack((e) => {
  if (e.canBack) {
    currentWebview.back() // webview内部返回
  } else {
    uni.navigateBack() // 退出页面
  }
})

4. 与H5页面通信 如果H5页面可控制,可通过postMessage通信:

// Uniapp端
const wv = this.$refs.webview
wv.postMessage({ type: 'backButton', show: true })

// H5端监听
window.addEventListener('message', function(e) {
  if(e.data.type === 'backButton') {
    // 在H5页面显示返回按钮
  }
})

选择最适合的方案:

  • 简单场景使用方案1
  • 需要精细控制使用方案3
  • H5可配合时使用方案4
回到顶部