Foxtable(狐表)用户栏目专家坐堂 → 纯js实现二维码扫描(脱离微信,不需要APP打包)


  共有70057人关注过本帖树形打印复制链接

主题:纯js实现二维码扫描(脱离微信,不需要APP打包)

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
纯js实现二维码扫描(脱离微信,不需要APP打包)  发帖心情 Post By:2020/6/15 14:35:00 [显示全部帖子]

测试好像只支持二维码扫描,不支持中文,不支持在微信里打开网页使用,需要使用手机浏览器测试,比如:夸克、UC等。

如果打不开摄像头,注意到应用管理里启用浏览器的摄像头权限。第一次使用可能会弹出使用摄像头的权限要求,点击同意启用。(148楼用户测试需要使用https,可能是现在app都提高了安全控制,http不行的可以试试https

方法1、来自web开发板块
zhenghangbo提供的用法:http://www.foxtable.com/bbs/dispbbs.asp?boardid=24&Id=150591

需要引用的js文件:llqrcode.js和test.js,把附件这个2个文件复制到“C:\web\lib”,HttpServer.WebPath 设置为 "c:\web"【HttpServer.WebPath = "c:\web"】

httprequest事件
    Case "test.htm"
        Dim wb As New weui
        wb.AddForm("","form1","tongji.htm")
        wb.AppendHTML("<script src='./lib/llqrcode.js'></script>",True) '引入脚本文件

        With wb.AddInputGroup("form1","ipg1","销售统计")
            .AddInput("cp","产品","text")
        End With
        With wb.AddButtonGroup("form1","btg1",False)
            .Add("scan", "扫码", "button")
            .Add("btn2", "统计", "button").Attribute= "onclick= 'tongji()'"
        End With
        wb.InsertHTML("<video id=""video"" muted autoplay playsinline width=""360"" height=""240""></video><canvas id=""qr-canvas"" style=""display:none;""></canvas>") '注意这里的控件id都是固定的,不要改变
        wb.InsertHTML("<div id='p1' style='margin:0.5em'></div>") '插入一个div,用于显示服务器返回的查询结果
        wb.AppendHTML("<script src='./lib/test.js'></script>") '引入脚本文件
        wb.AppendHTML("<script>Scan.init('scan','cp');</script>") '调用初始化方法,传入按钮id"scan"和接收数据的文本框id"cp"

本地测试,以内网IP启动服务,如:
HttpServer.Close()
HttpServer.Prefixes.Add("http://192.168.0.100/") '192.168.0.100改为自己服务器IP
HttpServer.WebPath = "c:\web"
HttpServer.Start()

手机连接本地wifi,然后使用浏览器访问:http://192.168.0.100/test.htm
如果手机连接本地wifi无法打开网页,关闭服务端电脑防火墙

方法2、使用html5-qrcode组件:https://github.com/mebjas/html5-qrcode

需要引用的js文件:html5-qrcode.min.js和test2.js,把附件这个2个文件复制到“C:\web\lib”,HttpServer.WebPath 设置为 "c:\web"【HttpServer.WebPath = "c:\web"】

httprequest事件

    Case "test2.htm"
        Dim wb As New weui
        wb.AddForm("","form1","tongji.htm")
        wb.AppendHTML("<script src='./lib/html5-qrcode.min.js'></script>",True) '引入脚本文件

        With wb.AddInputGroup("form1","ipg1","销售统计")
            .AddInput("cp","产品","text")
        End With
        With wb.AddButtonGroup("form1","btg1",False)
            .Add("scan", "扫码", "button").Attribute= "onclick= 'onScan()'" '调用开始扫码的js函数
            .Add("btn2", "统计", "button").Attribute= "onclick= 'tongji()'"
        End With
        wb.InsertHTML("<div id=""reader"" width=""300px""></div>")
        wb.InsertHTML("<div id='p1' style='margin:0.5em'></div>") '插入一个div,用于显示服务器返回的查询结果
        wb.AppendHTML("<script src='./lib/test2.js'></script>") '引入脚本文件
        'wb.AppendHTML("<script>let html5QrcodeScanner = new Html5QrcodeScanner('reader', { fps: 10, qrbox: 250 } , true);</script>" ) '引入脚本文件
        wb.AppendHTML("<script>const html5QrCode = new Html5Qrcode( ""reader"");</script>" ) '初始化二维码对象,绑定id为"reader"的div控件
        e.WriteString(wb.Build)

打开实例启动服务,手机连接本地wifi,然后使用浏览器访问:http://192.168.0.100/test2.htm

附件

以下内容只有回复后才可以浏览

[此贴子已经被作者于2024/4/14 20:09:25编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/16 13:39:00 [显示全部帖子]

以下是引用sloyy在2020/6/16 12:13:00的发言:
我2个例子都测试了,点扫码,没有反应,怎么都无法启动手机摄像头,哪里有问题?有能测试成功的狐友吗?我手机用的uc浏览器

手机怎么可以使用127.0.0.1访问?!要使用服务器IP地址访问

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/16 21:48:00 [显示全部帖子]

以下是引用sloyy在2020/6/16 21:36:00的发言:
我明白了,uc浏览器被我禁止了启动摄像头,难怪没有反应,换成自带的浏览器,弹出启动摄像头请求,允许后 试验成功!

倒是忽略了这一点,因为我手机浏览器经常用来给孩子搜题,所以默认是有权限使用摄像头的。

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/17 9:56:00 [显示全部帖子]

换台手机试试。可能手机对硬件权限的控制比较严格。或者百度、到组件的提供者那里咨询一下。

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/24 15:44:00 [显示全部帖子]

我只是提供一种用法,不保证可以兼容所有的手机和浏览器。

换台手机试试。可能手机对硬件权限的控制比较严格。或者百度、到组件的提供者那里咨询一下。

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/28 14:40:00 [显示全部帖子]

扫描只能使用后摄像头,又不是人脸识别

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/5 11:47:00 [显示全部帖子]

关闭服务器防火墙,或者防火墙添加开放80端口

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/5 14:05:00 [显示全部帖子]

如果使用APP打包请使用app提供的调用摄象头的用法,不要使用1楼这种方法。1楼这种方法会有各种限制,特别是现在国家严格控制app获取个隐私的情况下,很多时候都用不了的。

如果app提供的调用摄象头的用法也用不了,请去提供app打包的官方咨询了,这种东西我也解决不了

 回到顶部