uniapp与webview网页交互打开手机扫码

文章详细介绍了如何在uniapp项目中通过webview组件与网页交互,实现在手机端调用扫码功能。首先,网页需引入uni.webview.js并发送事件;接着,uniapp监听事件并调用摄像头;扫描后,uniapp通过evalJS将结果传回网页,网页通过CustomEvent监听并处理数据。
摘要由CSDN通过智能技术生成

公司的uniapp项目有一个专门打开网页的功能,uniapp通过webview去打开对应的url,然后通过监听webview网页发送过来的事件,在uniapp手机端打开手机的扫码功能,然后将扫码识别到的结果传回给网页。

思路

1.网页引入uni.webview.js文件

2.网页在某个时机或者某个事件发送事件

3.uniapp端监听处理事件,调用手机摄像头

4.uniapp将扫码结果传回

5.网页接收处理数据

1.网页引入uni.webview.js文件

因为网页端需要向app发送事件,所以需要引入对应的webview.js文件。这是基础。

如果项目会运行在内网环境,最好是引用已经下载好了的。

假如使用的是vue项目,则可以在index.html文件中去引入。

 2.网页在某个时机或者某个事件发送事件

如果需要在网页打开的时候就去调用,则需要监听uni是否可以安全调用

如果是通过点击事件去触发,一般来说按钮加载出来到可以交互,已经加载完成了。

直接使用uni.postMessage方法就好。最主要就是定义type事件的类型,这样在uniapp中可以根据对应的type值进行不同的处理逻辑。

3.uniapp端监听处理事件,调用手机摄像头

添加web-view组件,定义方法接收传递过来的信息。@message处理信息。

 然后根据type类型处理不同的逻辑,示例中专门处理type值为scanCode时候,就打开摄像头。

4.uniapp将扫码结果传回

这个是比较重要的,原理就是:通过拿到webview的内部对象,去调用系统的evalJS方法,将该方法内部的字符串当做代码去执行。示例中qrCodeWv是在初始化的时候拿到的。

 webview网页内容里面的话,要定义一个全局的appScanCodeResult方法 。如果没有定义,webview网页会报错找不到这个方法。evalJS方法会把里面的内容当做代码来处理,所以方法的参数如果是对象要使用JSON.stringify处理一下,然后引号包裹起来。

5.网页接收处理数据

网页是vue框架的话,最重要的就是如何将app执行的全局方法告诉对应的页面或者组件。所以要使用window的自定义事件CustomEvent。

本来CustomEvent方法是可以传递参数的,但是监听这个事件的时候,接收到的是一个event没有带值。所以干脆就当一个触发,将app传过来的值存储在全局的window上。

vue3的写法,注册监听,离开的时候注销就好。

 拿到扫描结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值