uni-app中web-view打開三方界面並跳轉小程序相關頁面


最近在項目中遇到這么一個需求,需要在小程序中跳轉第三方界面,認證通過后跳轉三方界面,整理了一下代碼,做個記錄

1.小程序中新建一個vue文件用作承載web-view

<template>
    <view>
        <web-view :src="url"></web-view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                url:''
            }
        },
        onLoad(e) {// 獲取傳遞過來的鏈接
            this.url = JSON.parse(decodeURIComponent(e.url))
        },
    }
</script>
<style>
    page{
        background: #ffffff;
    }
</style>

2.跳轉之后第三方頁面如下圖所示:

 

 

點擊確認授權,然后在后台接口中返回一個html文件,這個html文件是在后台代碼中寫的,html文件內容如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <title>網絡網頁</title>
        <style type="text/css">
            .btn {
                display: block;
                /*background-color: #f4556b;*/
                border: none;
                width: 40%;
                margin: 30px auto;
                color: #fff;
                text-align: center;
                border-radius: 50px;
                height:50px;
                font-size:20px;
                letter-spacing: 1px;
                background-image: linear-gradient(#fea1ae,#f55c71);
            }
            .desc {
                padding: 10px;
                color: #333333;
                width: 100%;
                font-size: 22px;
                text-align: center;
            }
            .shouquan{
                display: block;
                width: 70%;
                margin: 50px auto 30px;
            }
        </style>
    </head>
    <body>
        <input id="order_id" value="{{order_id}}" style="display:none">
        <img src="/static/images/shouquan.png" class="shouquan">
        <p class="desc">恭喜您已經授權成功 !</p>
        <div class="btn-list">
            <button class="btn" type="button" data-action="redirectTo">立即發貨</button>
        </div>
        <script type="text/javascript">
        var userAgent = navigator.userAgent;
        if (userAgent.indexOf('AlipayClient') > -1) {
            // 支付寶小程序的 JS-SDK 防止 404 需要動態加載,如果不需要兼容支付寶小程序,則無需引用此 JS 文件。
            document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>');
        } else if (/QQ/i.test(userAgent) && /miniProgram/i.test(userAgent)) {
            // QQ 小程序
            document.write(
              '<script type="text/javascript" src="https://qqq.gtimg.cn/miniprogram/webview_jssdk/qqjssdk-1.0.0.js"><\/script>'
            );
        } else if (/miniProgram/i.test(userAgent) && /micromessenger/i.test(userAgent)) {
            // 微信小程序 JS-SDK 如果不需要兼容微信小程序,則無需引用此 JS 文件。
            document.write('<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"><\/script>');
        } else if (/toutiaomicroapp/i.test(userAgent)) {
            // 頭條小程序 JS-SDK 如果不需要兼容頭條小程序,則無需引用此 JS 文件。
            document.write(
              '<script type="text/javascript" src="https://s3.pstatp.com/toutiao/tmajssdk/jssdk-1.0.1.js"><\/script>');
        } else if (/swan/i.test(userAgent)) {
            // 百度小程序 JS-SDK 如果不需要兼容百度小程序,則無需引用此 JS 文件。
            document.write(
              '<script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.18.js"><\/script>'
            );
        } else if (/quickapp/i.test(userAgent)) {
            // quickapp
            document.write('<script type="text/javascript" src="https://quickapp/jssdk.webview.min.js"><\/script>');
        }
        // if (!/toutiaomicroapp/i.test(userAgent)) {
        //     document.querySelector('.post-message-section').style.visibility = 'visible';
        // }
    </script>
    <!-- uni 的 SDK -->
    <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
    <script type="text/javascript">
      // 待觸發 `UniAppJSBridgeReady` 事件后,即可調用 uni 的 API。
      //   webView.setBackgroundColor(0);//設置背景色
      //   webView.getBackground().setAlpha(0);//設置填充透明度(布局中一定要設置background,不然getbackground會是null)
        document.addEventListener('UniAppJSBridgeReady', function() {
            var orderId = document.getElementById('order_id').value;
            console.log(orderId)
            uni.postMessage({
                data: {
                    action: 'message'
                }
            });
            uni.getEnv(function(res) {
                console.log('當前環境:' + JSON.stringify(res));
            });
            document.querySelector('.btn-list').addEventListener('click', function(evt) {
                document.body.style.backgroundColor = '#3333';
                var target = evt.target;
                if (target.tagName === 'BUTTON') {
                    var action = target.getAttribute('data-action');
                    switch (action) {
                        case 'switchTab':
                            uni.switchTab({
                            url: '/pages/tabBar/API/API'
                        });
                        break;
                    case 'reLaunch':
                        uni.reLaunch({
                            url: '/pages/tabBar/component/component'
                        });
                        break;
                    case 'navigateBack':
                        uni.navigateBack({
                        delta: 1
                        });
                        break;
                    default:
                        uni[action]({
                            url: '/pages/order/chooseShansong?data='+orderId
                        });
                        break;
                    }
                }
            });
            // document.getElementById('postMessage').addEventListener('click', function() {
            //     uni.postMessage({
            //         data: {
            //             action: 'message'
            //         }
            //     });
            // });
        });
    </script>
  </body>
</html>

然后就完成啦!

親測可用哦,歡迎大家一起分享討論哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM