uniapp 内嵌 webview 客服网页,呼出键盘遮挡输入框问题解决记录

uni-app

有很多情况需要在app端内嵌一个H5客服网页,但这个页面一般都是有打字的需求,但由于大部分情况下网页都是默认铺满整个画面,导致键盘弹出时出现遮挡输入框的问题。

直接上代码:

javascript
<template>
    <view class="service-container">
        <view class="content">
            // 这里正常引入webview
            <web-view :src="url">
            </web-view>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                url: '',  // 网址
                height: 0, // 页面高度
                barHeight: 0, // 状态栏高度
                kbHeight: 0 // 键盘高度
            };
        },
        onLoad() {

            this.url = ‘xxxxxxx’;
            // 这里是为了用原生的导航栏遮挡H5客服页面的头部,因为大部分客服页面都没有返回键
                setTimeout(() => {
                    uni.setNavigationBarTitle({
                        title: '在线客服'
                    })
                }, 1000)
                console.log(this.url);
        },
        onShow() {
            //  监听键盘高度变化
            uni.onKeyboardHeightChange((obj) => {
                // 获取系统信息
                let _sysInfo = uni.getSystemInfoSync();
                let _heightDiff = _sysInfo.screenHeight - _sysInfo.windowHeight
                let _diff = obj.height - _heightDiff
                // 键盘高度
                this.kbHeight = (_diff > 0 ? _diff : 0) - 2;
            })
        // 同时监听页面变化
            uni.onWindowResize(res => {
                console.log(res);
                if (res.size.windowHeight < this.height) {
                    setTimeout(() => {
                        this.wv.setStyle({
                            top: this.barHeight,
                            // webview的高度动态修改为减去键盘高度后的
                            height: this.height - this.kbHeight,
                            bottom: 0
                        })
                    }, 100)
                } else {
                    setTimeout(() => {
                        this.wv.setStyle({
                            top: this.barHeight,
                            // 这里可以根据自己情况微调
                            height: this.height + 60,
                            bottom: 0
                        })
                    }, 100)
                }
            })
        },
        onReady() {
            // 首次进入页面时,webview高度 = 整个页面高度
            let currentWebview = this.$scope.$getAppWebview();
            uni.getSystemInfo({
                success: res => {
                    this.height = res.windowHeight;
                    setTimeout(() => {
                        this.wv = currentWebview.children()[0];
                        this.wv.setStyle({
                            top: this.barHeight,
                            height: this.height + 60,
                            bottom: 0
                        });
                    }, 100);
                }
            });
        }
    };
</script>

<style lang="scss">
    .service-container {
        background-color: #f2f5ff;
    }
</style>

留言板

uniapp 内嵌 webview 客服网页,呼出键盘遮挡输入框问题解决记录

写信给我

交个朋友

  1. Wechat

    yflowerred

    聊会儿
  2. 即刻

    抱走大柠檬

    关注我
  3. Twitter X

    hugLemon

    关注我

友情链接

  1. Free PDF Tools

    免费PDF工具集合

    查看
  2. indie hacker tools

    独立开发者工具集合

    查看
  3. Jasmine Business

    Make your business easier in China.

    查看
  4. 乘风外贸工具导航

    外贸工具导航大全

    查看
  5. inWind乘风出海

    智能外贸生态服务平台

    查看
  6. Charcoal Go

    shisha & BBQ charcoal supplies

    查看
  7. Next.js中文文档

    Next.js中文文档和资源

    查看
  8. Corey

    Corey Chiu

    查看