uni-app 官方WebView全能扩展、支持plus、vue、nvue里的WebView

uni-app 官方WebView全能扩展、支持plus、vue、nvue里的WebView:https://ext.dcloud.net.cn/plugin?id=9832

<template>
    <view class="content">
        <view class="title">我是web-view组件</view>
        <web-view ref="webview" class="webView" :src="src"></web-view>
        <view class="title title2">我是plus.webview组件</view>
        <view class="btns">
            <button type="primary" @click="search">搜索所有webview</button>
            <button type="primary" @click="init">初始化</button>
            <button type="primary" @click="evaluateJavascript">app调网页中方法</button>
            <button type="primary" @click="onH5SendDataCallBack">监听网页发送的数据</button>
            <button type="primary" @click="setUserAgent">设置UserAgent(桌面/电脑网站例子)</button>
            <button type="primary" @click="getUserAgent">获取UserAgent</button>
            <button type="primary" @click="reload">重新加载webview</button>
            <button type="primary" @click="setPrompt">setPrompt(ios)</button>
            <button type="primary" @click="setSwipeBack">是否开启侧滑返回(ios)</button>
        </view>
    </view>
</template>

<script>
    const KJWebView = uni.requireNativePlugin('KJ-WebView');
    export default {
        data() {
            return {
                src: '/hybrid/html/index.html',
                wv: null,
                search_result: null
            }
        },
        onLoad() {
            this.onH5SendDataCallBack();
        },
        onBackPress() {
            plus.webview.close(this.wv);
        },
        onReady() {
            var currentWebview = this.$scope
                .$getAppWebview() //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效
            setTimeout(function() {
                var wv = currentWebview.children()[0]
                wv.setStyle({
                    top: uni.getSystemInfoSync().statusBarHeight + 44 + 30,
                    height: 200
                })
            }, 1000); //如果是页面初始化调用时,需要延时一下

            setTimeout((res) => {
                this.wv = plus.webview.create("/hybrid/html/index.html", "custom-webview", {
                    top: uni.getSystemInfoSync().statusBarHeight + 44 + 280,
                    height: 200
                })
                this.wv.show(); // 显示窗口
                this.search()
            }, 100)
        },
        methods: {
            search() {
                KJWebView.search({
                    "noKeywords": ["__uniappview.html"] //不需要捕获的url关键字的webview
                }, (res) => {
                    console.log("search:" + JSON.stringify(res));
                    this.search_result = res.result;
                    this.init();
                })
            },
            init() {
                for (var i = 0; i < this.search_result.length; i++) {
                    var result_dic = this.search_result[i];
                    var dic = {
                        "tag": result_dic.tag
                    }
                    KJWebView.init(dic, (res) => {
                        console.log("init:" + JSON.stringify(res));
                    })
                }
            },
            evaluateJavascript() {
                for (var i = 0; i < this.search_result.length; i++) {
                    var result_dic = this.search_result[i];
                    var jsonStr = JSON.stringify({
                        "key": 1
                    })
                    var dic = {
                        "tag": result_dic.tag,
                        "js": "('" + jsonStr + "')"
                    }
                    KJWebView.evaluateJavascript(dic, (res) => {
                        console.log("evaluateJavascript:" + JSON.stringify(res));
                    });
                }
            },
            setUserAgent() {
                this.src = "https://www.baidu.com/";
                for (var i = 0; i < this.search_result.length; i++) {
                    var result_dic = this.search_result[i];
                    var dic = {
                        "tag": result_dic.tag,
                        "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0_0) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.12.10 Chrome/69.0.3497.128 Safari/537.36"
                    }
                    //"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
                    //"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0"
                    KJWebView.setUserAgent(dic, (res) => {
                        console.log("setUserAgent:" + JSON.stringify(res));
                    });
                }
            },
            getUserAgent() {
                for (var i = 0; i < this.search_result.length; i++) {
                    var result_dic = this.search_result[i];
                    var dic = {
                        "tag": result_dic.tag,
                        "js": "navigator.userAgent"
                    }
                    KJWebView.evaluateJavascript(dic, (res) => {
                        console.log("getUserAgent:" + JSON.stringify(res));
                        //Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Html5Plus/1.0 (Immersed/47) uni-app
                        uni.showModal({
                            title: "获取UserAgent",
                            content: JSON.stringify(res)
                        })
                    });
                }
            },
            reload() {
                for (var i = 0; i < this.search_result.length; i++) {
                    var result_dic = this.search_result[i];
                    var dic = {
                        "tag": result_dic.tag,
                    }
                    KJWebView.reload(dic, (res) => {
                        console.log("reload:" + JSON.stringify(res));
                    });
                }
            },
            onH5SendDataCallBack() {
                KJWebView.onH5SendDataCallBack((res) => {
                    console.log("onH5SendDataCallBack:" + JSON.stringify(res));
                    uni.showModal({
                        title: "监听网页发送的数据",
                        content: JSON.stringify(res)
                    })
                })
            },
            setPrompt() {
                var dic = [{
                    "promptName": "getData",
                    "returnStr": "test"
                }];
                KJWebView.setPrompt(dic, (res) => {
                    console.log("setPrompt:" + JSON.stringify(res));
                })
            },
            setSwipeBack() {
                this.src = "https://www.baidu.com/";
                for (var i = 0; i < this.search_result.length; i++) {
                    var result_dic = this.search_result[i];
                    var dic = {
                        "tag": result_dic.tag,
                        "is": true
                    }
                    KJWebView.setSwipeBack(dic, (res) => {
                        console.log("setSwipeBack:" + JSON.stringify(res));
                    });
                }
            }
        }
    }
</script>

<style>
    .title {
        text-align: center;
        color: red;
    }

    .title2 {
        width: 750rpx;
        position: absolute;
        top: 240px;
    }

    .btns {
        width: 750rpx;
        position: fixed;
        bottom: 20px;
        display: flex;
        flex-wrap: wrap;
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
    }

    .btns>button {
        font-size: 14px;
    }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值