uni-app app-plus

  • Post author:
  • Post category:其他


项目目录结构

index.vue

<template>
	<view>
		<web-view :src="home" @message="handleMsg"></web-view>
		<view id="header">
			<!--#ifdef APP-PLUS-->
			<button @click="scan">扫码</button>
			<textarea :value="codes.join('\r\n')" :maxlength="-1" style="width:calc(100% - 8px);margin:3px;height:50px;border:1px solid #ccc;"></textarea>
			<!--#endif-->
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
			    //必须要放在/hybrid/html/目录下
				home:"/hybrid/html/index.html",
				codes:[]
			}
		},
		onLoad() {
		},
		computed:{
			codeHeight(){
				return uni.upx2px(50) + 'px';
			}
		},
		mounted(){
			let that = this;
			//获取元素高度
			const query = uni.createSelectorQuery().in(this);
			query.select('#header').boundingClientRect(data => {
				let top = that.statusBarHeight+data.height;
				//this.$mp.page.$getAppWebview().children()[0] 此种方式也可以获取到webview
				that.webv = that.$scope.$getAppWebview().children()[0];
			    that.webv.setStyle({
					top: top,
					height: that.windowHeight-top
				})
			}).exec();
		},
		methods: {
		    //处理webview html页面发送的消息
			handleMsg(e){
				let that = this;
				//虽然发送的是一个对象,但这里是一个数组
				if(e.detail.data.length && e.detail.data[0].action == "scan")
				{
					uni.scanCode({
						onlyFromCamera:true,
						success(res){
							that.webv.evalJS("showCode(\""+res.result.replace("\"","'")+"\")")
						}
					})
				}
			},
			scan() {
				let that = this;
				//全屏扫码
				//#ifdef APP-PLUS
				uni.scanCode({
					onlyFromCamera:true,
					success(res){
						that.codes.push(res.result)
					}
				})
				//#endif
			}
		}
	}
</script>

App.vue

<script>
	export default {
		onLaunch: function() {
			uni.getSystemInfo({
				success:function(e){
					Vue.prototype.statusBarHeight = e.statusBarHeight;
					
					// #ifndef MP
					if(e.platform == 'android') {
						Vue.prototype.statusBarHeight = e.statusBarHeight + 50
					}else {
						Vue.prototype.statusBarHeight = e.statusBarHeight + 45
					}
					// #endif
					
					// #ifdef MP-WEIXIN
					let wxrect = wx.getMenuButtonBoundingClientRect()
					Vue.prototype.statusBarHeight = wxrect.bottom + wxrect.top - e.statusBarHeight
					// #endif
					
					// #ifdef MP-ALIPAY
					Vue.prototype.statusBarHeight = e.statusBarHeight + e.titleBarHeight
					// #endif
					
					Vue.prototype.windowHeight = e.windowHeight
				}
			})
		}
	}
</script>

<style>
	/*每个页面公共css */
</style>

index.html

<!DOCTYPE html>
<html>
<head>
    <title>测试</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <style>
    .row{margin:5px 0px;}
    #txtCode{width:calc(100% - 80px);padding:3px 5px;font-size:14px;margin-right:10px;}
    .btn{background-color:#ccc;border:none;padding:3px 8px;}
    </style>
</head>
<body>
<div class="row"><input type="text" id="txtCode" name="txtCode" >
<input type="button" value="扫码" class="btn" id="scanCode"/></div>
<script src="zepto.js" type="text/javascript"></script>
<script>
	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)) {

	}
	</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">
	document.addEventListener('UniAppJSBridgeReady', function() {
		$("#scanCode").click(function(){
		    //发的是一个对象,接收的是一个数组
			uni.postMessage({
				data:{
					action:"scan"
				}
			})
		});
	});
	
	//扫码成功,回调
	function showCode(code)
	{
		$("#txtCode").val(code)
	}
</script>
</body>
</html>

调试:

1.运行->运行到手机或模拟器(N)->制作自定义调试基座

2.创建好基座后,运行-运行到手机或模拟器(N)->运行基座选择->自定义调试基座

3.USB连接手机,运行-运行到手机或模拟器(N)->[你的手机设备]

运行窗口工具栏第一个bug图标,点击调试。

需要安装uni-debugger,安装完之后配置一下”HBuilderX\plugins\uniapp-debugger\node_modules\puppeteer-cn-2\node_modules\puppeteer\lib\Launcher.js” 找到executablePath = null,改为本地chrome.exe完整路径即可。



版权声明:本文为zhchfsky原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。