uni-app 自定义扫码界面
二维码扫描,已经成为当下一款应用不可或缺,同时也是用户习以为常的功能了。uni-app 为我们提供了扫码 API ,直接调用即可。
需求场景
在实际开发中,平台提供的默认扫码界面,并不能满足一些自定义的需求。例如:
- 非全屏显示
- 扫码界面文字国际化
- 扫码框的颜色调整
微信小程序等小程序平台,可以通过 <camera> 组件来实现部分自定义的需求。App 平台需要通过本地 HTML 来实现,即本文要分享的内容。
Tips:这里的 App 特指 Android(.apk)、iOS(.ipa) 移动应用,非泛指所有应用。
实现思路
在 App 上实现自定义扫码界面,有以下几个关键点的支持:
- uni-app 在 App 平台支持 HTML5+ 规范的调用,这是核心依赖。
<web-view>组件在 App 平台支持加载本地 HTML,这为自定义的 HTML 文件提供了规范目录存放。
大致的思路如下:
- 开发一个 HTML 页面,使用 plus.barcode 等实现扫码功能。
- 在 .vue 页面中通过 plus.webview 直接打开扫码页面。
- 扫码页面监听 backbutton,防止打乱 uni-app 原有的路由控制。
- 通过 plus.storage 实现数据的存储,以及 .vue 页面的数据读取。
关键代码
barcode.html
不同于 uni-app 直接调用 plus,在 HTML 中一定要等 plusready 后调用 plus 的 API。
var plusReady = function (callback) {
if (window.plus && window.plus.isReady) {
callback();
} else {
document.addEventListener('plusready', function () {
callback();
}, false);
}
};
通过 create 方法创建的 Barcode 实例对象,一定要 append 到当前 Webview 上。
var barcode = plus.barcode.create(options.barcodeId, options.scanTypes, options.styles);
/* 省略代码 */
plus.webview.currentWebview().append(barcode);
监听 backbutton 的操作,防止打乱 uni-app 的路由管理,导致页面后退等操作异常。
plus.key.addEventListener('backbutton', function () {
goBack();
});
index.vue
App 特有的功能及调用 plus 的 API,一定要条件编译。
<!-- #ifdef APP-PLUS -->
<button type="primary" @click="openBarcode">扫码</button>
<!-- #endif -->
// #ifdef APP-PLUS
openBarcode() {
/* 省略代码 */
}
// #endif
监听扫码页面的销毁事件,在回调中读取扫码的结果。
barcodeWebview.addEventListener('close', function () {
var barcodeValue = plus.storage.getItem('barcode_value');
if (barcodeValue) {
var barcodeResult = JSON.parse(barcodeValue);
if (barcodeResult.code === 0) {
_self.title = '扫码结果:' + barcodeResult.result;
} else {
_self.title = '扫码失败';
}
}
});
源码
上面只提到了一些关键或可能被忽视的代码,完整的代码已经上传至 GitHub,请自行下载体验。
注意事项
数据同步
目前是通过 plus.storage 实现的数据共享,可能会出现扫码界面已经关闭但是数据还没有立刻同步的情况。
页面跳转
除了一定要在 HTML 中监听 backbutton 外,还需要注意后续页面切换的操作。
可以是 vue->html 或者 vue->html->html,然后逐级 back。一定不能出现 html->vue 这种跳转,uni-app 的路由管理会乱掉。
更多增强
HTML5+ 提供的扫码能力,可以满足自定义大小,绘制文字的国际化,扫码框颜色定制等。在 plus.view 的支持下,还可以绘制更加丰富的自定义界面。当然,你可能需要加强一下对于 HTML5+ 的掌握。
结束
如果本文的分享对你有所帮助的话,请不要吝啬给 uni-custom-scan-code 一个小星星。目前的例子还是比较单薄,后面会持续补充一些示例,欢迎大家持续关注。
uni-app 自定义扫码界面的更多相关文章
- uni-app自定义app端的扫码界面
记得当时是在西班牙有这样的一个需求,需要自定义扫码页面,还需要加上西班牙文,当时是在一个组件里面找到了这样的一个方法,全文大部分使用的app端的Native里面的方法,记录一下,跑路了项目代码要删库了 ...
- FNScanner二维码接口openView自定义扫码Demo
本文出自APICloud官方论坛 FNScanner 模块是一个二维码/条形码扫描器,是 scanner 模块的优化升级版.在 iOS 平台上本模块底层集成了 Zbar 和系统自带的条形码/二维码分析 ...
- 别再问WiFi密码了,HMS Core统一扫码服务让手机一键联网
现代生活离不开网络.在餐厅.商场等公共场所,手机连接WiFi一直是高频使用场景.虽然公共场所的免费WiFi越来越多,但网络连接过程却很麻烦.有的需要打开网页注册或点击广告链接才能上网,还有的要求下载特 ...
- C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理
在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登 ...
- Odoo 仓库扫码打包方案
Odoo仓库扫码的设计,前提是操作人在PC上先做好分拣单,然后根据打印出来的分拣单去仓库进行扫码打包,默认的情况下,分拣在被确认的时候会自动保留库位中已经存在的库存(已经分配批次\序列号),而 ...
- spring boot高性能实现二维码扫码登录(下)——订阅与发布机制版
前言 基于之前两篇(<spring boot高性能实现二维码扫码登录(上)——单服务器版>和<spring boot高性能实现二维码扫码登录(中)——Redis版>)的基础, ...
- Channels实现扫码登录
参考了下别人说的原理,根据自己的逻辑实现,没有完全按照别人的原理来,所以不一定适用于大家,仅供参考吧!!! 流程如下: 1. web发起websocket链接,后端接受链接后立马发送第一次消息,为全局 ...
- 【JavaWeb开发】初步实现网站应用钉钉扫码登录
http://blog.csdn.net/baofeidyz/article/details/59059379 版权声明:转载请注明我的个人微信平台 暴沸 目录(?)[+] 写在前面:如果你还不知道钉 ...
- Blazor组件自做三 : 使用JS隔离封装ZXing扫码
Blazor组件自做三 : 使用JS隔离封装ZXing扫码 本文基础步骤参考前两篇文章 Blazor组件自做一 : 使用JS隔离封装viewerjs库 Blazor组件自做二 : 使用JS隔离制作手写 ...
随机推荐
- day03深浅拷贝、文件操作和函数初识
一.赋值.浅拷贝与深拷贝 直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法, ...
- 前端异步编程之Promise和async的用法
传统的异步解决方案采用回调函数和事件监听的方式,而这里主要记录两种异步编程的新方案: ES6的新语法Promise ES2017引入的async函数 Generator函数(略) Promise的含义 ...
- BZOJ 2333 [SCOI2011]棘手的操作 (可并堆)
码农题.. 很显然除了两个全局操作都能用可并堆完成 全局最大值用个multiset记录,每次合并时搞一搞就行了 注意使用multiset删除元素时 如果直接delete一个值,会把和这个值相同的所有元 ...
- Oracle与Mysql内嵌游标的使用示例
Oracle 游标用For循环比较简单,Mysql也是最近才开始用,感觉稍微麻烦一点,下边直接上代码: ------------------------------------------------ ...
- 中国电信线CTF线下选拨writeup
[盟军密码|30分] 二战时盟军截获德军一段密码,密文为:0000011000000000101010110111000011000111100011110001001100111000111001( ...
- Centos上Mysql5.6的安装
安装步骤: (1)查看Centos是否自带mysql :rpm -qa | grep mysql (2)将原有卸载 rpm -e --nodeps mysql-libs-5.1.73-5.el ...
- 【codeforces 719E】Sasha and Array
[题目链接]:http://codeforces.com/contest/719/problem/E [题意] 给你一个数列,有两种操作1 l r x 给[l,r]区间上的数加上x, 2 l r 询问 ...
- robot Framework控制浏览器
向下 向上为负值
- 工具-vscode使用
1.智能感知 vscode使用DefinitelyTyped进行自动完成所以需要先安装tsd,命令: npm install -g tsd 安装完成后,首先安装node基本语法支持 tsd query ...
- [SharePoint2010开发入门经典]SPS2010开发工具
本章概要: 1.了解不同的开发SPS的方法 2.了解SPS开发工具和环境 3.使用VS2010和SPD还有Blend开发SPS