uni-app中h5页面中添加搜索按钮及监听

本文档详细介绍了在uni-app中使用web-view遇到的页面标题栏重叠和搜索按钮显示问题,以及如何通过自定义方法和生命周期钩子解决这些问题。包括在page.json中设置导航栏为custom,封装js库来控制搜索按钮的显示和隐藏,并在onShow和created生命周期中应用延迟加载策略确保按钮正常显示。
摘要由CSDN通过智能技术生成

uni-app中嵌套web-view

虽然uni-app能嵌套web-view但是会出现页面标题栏重叠的问题,所以打开的h5页面中会在page.json中将当前页面的导航栏标题去除。

        {
            "path" : "pages/clew-pool/clew-pool-index/clew-pool-index",
            "style" :                                                                                    
            {
                "navigationBarTitleText": "线索池",
                "enablePullDownRefresh": false,
                "navigationBarBackgroundColor":"#FFFFFF",
                "navigationStyle": "custom",//去除h5导航栏标题
                "h5": {
                    "titleNView": {
                        "buttons": [
							{
								"text": "\ue6f5",
                                "fontSrc": "/static/fonts/iconfont.ttf",
								"fontWeight": "normal",
                                "width": "30px",
								"fontSize": "36rpx",
								"float": "right"
							}
						]
                    }
                }
            }
        },

但是自定义右边栏搜索按钮也将会去除掉,所以为了补充上去引入了web-view方法,先来看效果
在这里插入图片描述
这个是用web-view打开h5页面后通过web-view官方说明得到的一个搜索设置
将js方法封装在公共js库中如下:

// 右上角不显示搜索按钮
export function uniSetEmpty() {
  console.log('uniSetEmpty',new Date().getTime())
  uni.webView.postMessage({
    data: {
      action: "setRightEmpty",
    },
  });
}
// 右上角设置显示搜搜按钮
export function uniSetSearch() {
  console.log('onTGAppCallBacktype=',new Date().getTime())
  uni.webView.postMessage({
    data: {
      action: "setRightMenu",
    },
  });
}

页面引入如下:

<script>
import { uniSetEmpty, uniSetSearch } from "@/utils/tool/uni.js";//封装js库的路径
export default {
data() {
    return {
    
    	}
   	 },
//uni-app执行的生命周期
onShow() {
    let _this = this;
    //设置搜索按钮
    uniSetSearch();
    console.log("onShow-设置搜索按钮");
    //点击搜索按钮的回调事件
    window.onTGAppCallBack = function (res) {
      _this.jumpSearchPage();
    };
  },
  methods: {
  //右侧搜索按钮点击事件
    jumpSearchPage() {
      console.log("jumpSearchPagejumpSearchPage");
      uni.navigateTo({
        url: "/pages/clew-pool/clew-pool-list/clew-pool-list"
      })
    }
  }
 }
 </script>

注意:上面执行的生命周期可能会出现偶现搜索按钮出现不出来问题,但 onShow 这个生命周期里面是必须要写上的,所以可以在其它生命周期里面加上延时器解决此问题,比如:从APP第一次进入web-view可能会偶现搜索按钮不能及时出现

解决办法如下:

<script>
import { uniSetEmpty, uniSetSearch } from "@/utils/tool/uni.js";//封装js库的路径
export default {
data() {
    return {
    
    	}
   	 },
   	 
created() {
    let _this = this;
    setTimeout(() => {
      //设置搜索按钮
      uniSetSearch();
      console.log("created-设置搜索按钮");
      //点击搜索按钮的回调事件
      window.onTGAppCallBack = function (res) {
        _this.jumpSearchPage();
      };
    }, 500);
  },
  
//uni-app执行的生命周期
onShow() {
    let _this = this;
    //设置搜索按钮
    uniSetSearch();
    console.log("onShow-设置搜索按钮");
    //点击搜索按钮的回调事件
    window.onTGAppCallBack = function (res) {
      _this.jumpSearchPage();
    };
  },
  
methods: {
  //右侧搜索按钮点击事件
    jumpSearchPage() {
      console.log("jumpSearchPagejumpSearchPage");
      uni.navigateTo({
        url: "/pages/clew-pool/clew-pool-list/clew-pool-list"
      })
    }
  }
 }
 </script>

上面created中又加入一个安全时间 ,通过延时器 解决web-view第一次进入后搜索按钮可能会不显示问题。

↓↓↓ 个人写的一个公众号,还在完善中 ↓↓↓ | ᴥ•́ )✧ ↓↓↓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值