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隔离制作手写 ...
随机推荐
- 杭电2602 Bone Collector 【01背包】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 解题思路:给出一个容量为V的包,以及n个物品,每一个物品的耗费的费用记作c[i](即该物品的体积 ...
- 【WebApp】IOS兼容问题
最近,主要是基于Framework7 + RequireJs框架,移动端团队开发Webview框架,内嵌Web的模式进行WebApp开发. 在开发过程中不得不遇到一些 兼容性问题. 1.现象:IOS环 ...
- Embeding如何理解?
参考: http://www.sohu.com/a/206922947_390227 https://zhuanlan.zhihu.com/p/27830489 https://www.jianshu ...
- Javase 简单练习
public class Test10 { public static void main(String[] args) { System.out.println("------------ ...
- JS 20180416课时训练
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- BZOJ1150 [CTSC2007] 数据备份Backup 贪心_堆_神题
Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家 ...
- Gym-101615D Rainbow Roads 树的DFS序 差分数组
题目链接:https://cn.vjudge.net/problem/Gym-101615D 题意 给一棵树,每个边权表示一种颜色. 现定义一条彩虹路是每个颜色不相邻的路. 一个好点是所有从该节点开始 ...
- KMP算法(推导方法及模板)
介绍 克努斯-莫里斯-普拉特算法Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串S内查找一个词W的出现位置.此算法通过运用对这个词在不匹配时本身就包含足够的信 ...
- vncserve安装与使用
vncserver安装与配置 1.1.Centos安装 yum install tigervnc-server yum groupinstall "X Window System" ...
- Python - 采用 contextmanage 简化代码
contextlib.contextmanage Python 2.7 documents: https://docs.python.org/2.7/library/contextlib.html?h ...