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