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
 
        
       
                     
                   
                    

