最近在項目中遇到這么一個需求,需要在小程序中跳轉第三方界面,認證通過后跳轉三方界面,整理了一下代碼,做個記錄
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>
然后就完成啦!
親測可用哦,歡迎大家一起分享討論哦