uni-app中web-view打开三方界面并跳转小程序相关页面
<p>最近在项目中遇到这么一个需求,需要在小程序中跳转第三方界面,认证通过后跳转三方界面,整理了一下代码,做个记录</p><p>1.小程序中新建一个vue文件用作承载web-view</p>
<div class="cnblogs_code">
<pre><template>
<view>
<web-view :src=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">url</span><span style="color: rgba(128, 0, 0, 1)">"</span>></web-view>
</view>
</template>
<script><span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
data() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
url:</span><span style="color: rgba(128, 0, 0, 1)">''</span>
<span style="color: rgba(0, 0, 0, 1)"> }
},
onLoad(e) {</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取传递过来的链接</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.url =<span style="color: rgba(0, 0, 0, 1)"> JSON.parse(decodeURIComponent(e.url))</span><span style="color: rgba(0, 0, 0, 1)">
},
}
</span></script>
<style><span style="color: rgba(0, 0, 0, 1)">
page{
background: #ffffff;
}
</span></style></pre>
</div>
<p>2.跳转之后第三方页面如下图所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/1860986/202011/1860986-20201107132438818-940527356.png"></p>
<p> </p>
<p> </p>
<p>点击确认授权,然后在后台接口中返回一个html文件,这个html文件是在后台代码中写的,html文件内容如下:</p>
<div class="cnblogs_code">
<pre><!DOCTYPE html>
<html>
<head>
<meta charset=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">"</span> />
<meta name=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">viewport</span><span style="color: rgba(128, 0, 0, 1)">"</span> content=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no</span><span style="color: rgba(128, 0, 0, 1)">"</span> />
<title>网络网页</title>
<style type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text/css</span><span style="color: rgba(128, 0, 0, 1)">"</span>><span style="color: rgba(0, 0, 0, 1)">
.btn {
display: block;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">background-color: #f4556b;</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
border: none;
width: </span><span style="color: rgba(128, 0, 128, 1)">40</span>%<span style="color: rgba(0, 0, 0, 1)">;
margin: 30px auto;
color: #fff;
text</span>-<span style="color: rgba(0, 0, 0, 1)">align: center;
border</span>-<span style="color: rgba(0, 0, 0, 1)">radius: 50px;
height:50px;
font</span>-<span style="color: rgba(0, 0, 0, 1)">size:20px;
letter</span>-<span style="color: rgba(0, 0, 0, 1)">spacing: 1px;
background</span>-image: linear-<span style="color: rgba(0, 0, 0, 1)">gradient(#fea1ae,#f55c71);
}
.desc {
padding: 10px;
color: #</span><span style="color: rgba(128, 0, 128, 1)">333333</span><span style="color: rgba(0, 0, 0, 1)">;
width: </span><span style="color: rgba(128, 0, 128, 1)">100</span>%<span style="color: rgba(0, 0, 0, 1)">;
font</span>-<span style="color: rgba(0, 0, 0, 1)">size: 22px;
text</span>-<span style="color: rgba(0, 0, 0, 1)">align: center;
}
.shouquan{
display: block;
width: </span><span style="color: rgba(128, 0, 128, 1)">70</span>%<span style="color: rgba(0, 0, 0, 1)">;
margin: 50px auto 30px;
}
</span></style>
</head>
<body>
<input id=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">order_id</span><span style="color: rgba(128, 0, 0, 1)">"</span> value=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{{order_id}}</span><span style="color: rgba(128, 0, 0, 1)">"</span> style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">display:none</span><span style="color: rgba(128, 0, 0, 1)">"</span>>
<img src=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/static/images/shouquan.png</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">shouquan</span><span style="color: rgba(128, 0, 0, 1)">"</span>>
<p <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">desc</span><span style="color: rgba(128, 0, 0, 1)">"</span>>恭喜您已经授权成功 !</p>
<div <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">btn-list</span><span style="color: rgba(128, 0, 0, 1)">"</span>>
<button <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">btn</span><span style="color: rgba(128, 0, 0, 1)">"</span> type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(128, 0, 0, 1)">"</span> data-action=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">redirectTo</span><span style="color: rgba(128, 0, 0, 1)">"</span>>立即发货</button>
</div>
<script type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text/javascript</span><span style="color: rgba(128, 0, 0, 1)">"</span>>
<span style="color: rgba(0, 0, 255, 1)">var</span> userAgent =<span style="color: rgba(0, 0, 0, 1)"> navigator.userAgent;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (userAgent.indexOf(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">AlipayClient</span><span style="color: rgba(128, 0, 0, 1)">'</span>) > -<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 支付宝小程序的 JS-SDK 防止 404 需要动态加载,如果不需要兼容支付宝小程序,则无需引用此 JS 文件。</span>
document.writeln(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><script src="https://appx/web-view.min.js"</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">></span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">script></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (/QQ/i.test(userAgent) && /miniProgram/<span style="color: rgba(0, 0, 0, 1)">i.test(userAgent)) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> QQ 小程序</span>
<span style="color: rgba(0, 0, 0, 1)"> document.write(
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><script type="text/javascript" src="https://qqq.gtimg.cn/miniprogram/webview_jssdk/qqjssdk-1.0.0.js"><\/script></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (/miniProgram/i.test(userAgent) && /micromessenger/<span style="color: rgba(0, 0, 0, 1)">i.test(userAgent)) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 微信小程序 JS-SDK 如果不需要兼容微信小程序,则无需引用此 JS 文件。</span>
document.write(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"><\/script></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (/toutiaomicroapp/<span style="color: rgba(0, 0, 0, 1)">i.test(userAgent)) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 头条小程序 JS-SDK 如果不需要兼容头条小程序,则无需引用此 JS 文件。</span>
<span style="color: rgba(0, 0, 0, 1)"> document.write(
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><script type="text/javascript" src="https://s3.pstatp.com/toutiao/tmajssdk/jssdk-1.0.1.js"><\/script></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (/swan/<span style="color: rgba(0, 0, 0, 1)">i.test(userAgent)) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 百度小程序 JS-SDK 如果不需要兼容百度小程序,则无需引用此 JS 文件。</span>
<span style="color: rgba(0, 0, 0, 1)"> document.write(
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.18.js"><\/script></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (/quickapp/<span style="color: rgba(0, 0, 0, 1)">i.test(userAgent)) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> quickapp</span>
document.write(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><script type="text/javascript" src="https://quickapp/jssdk.webview.min.js"><\/script></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> if (!/toutiaomicroapp/i.test(userAgent)) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> document.querySelector('.post-message-section').style.visibility = 'visible';
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> }</span>
</script>
<!-- uni 的 SDK -->
<script type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text/javascript</span><span style="color: rgba(128, 0, 0, 1)">"</span> src=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js</span><span style="color: rgba(128, 0, 0, 1)">"</span>></script>
<script type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text/javascript</span><span style="color: rgba(128, 0, 0, 1)">"</span>>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 待触发 `UniAppJSBridgeReady` 事件后,即可调用 uni 的 API。
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> webView.setBackgroundColor(0);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置背景色
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> webView.getBackground().setAlpha(0);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置填充透明度(布局中一定要设置background,不然getbackground会是null)</span>
document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UniAppJSBridgeReady</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, function() {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> orderId = document.getElementById(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">order_id</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).value;
console.log(orderId)
uni.postMessage({
data: {
action: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">message</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
}
});
uni.getEnv(function(res) {
console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">当前环境:</span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> JSON.stringify(res));
});
document.querySelector(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">.btn-list</span><span style="color: rgba(128, 0, 0, 1)">'</span>).addEventListener(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">click</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, function(evt) {
document.body.style.backgroundColor </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">#3333</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> target =<span style="color: rgba(0, 0, 0, 1)"> evt.target;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (target.tagName === <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">BUTTON</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> action = target.getAttribute(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">data-action</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (action) {
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">switchTab</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
uni.switchTab({
url: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/pages/tabBar/API/API</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
});
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">reLaunch</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
uni.reLaunch({
url: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/pages/tabBar/component/component</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
});
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">navigateBack</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
uni.navigateBack({
delta: </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
});
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">:
uni({
url: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/pages/order/chooseShansong?data=</span><span style="color: rgba(128, 0, 0, 1)">'</span>+<span style="color: rgba(0, 0, 0, 1)">orderId
});
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> document.getElementById('postMessage').addEventListener('click', function() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> uni.postMessage({
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> data: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> action: 'message'
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> }
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> });
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> });</span>
<span style="color: rgba(0, 0, 0, 1)"> });
</span></script>
</body>
</html></pre>
</div>
<p>然后就完成啦!</p>
<p>亲测可用哦,欢迎大家一起分享讨论哦</p><br><br>
来源:https://www.cnblogs.com/menxiaojin/p/13940740.html
頁:
[1]