html识别二维码,h5调取二维码扫描

  html识别二维码,h5调取二维码扫描

  简介:

  最近公司项目里有个要求。在微博客户端中,h5的页面上的一个按钮可以和native交互调出摄像头,扫描二维码,进行分析。在非微博客户端(微信或原生浏览器,如safari),调用系统的拍照或上传图片按钮,通过拍照或上传图片分析二维码。

  第二种方案需要解析前端js中的二维码。它依赖于第三方解析库jsqrcode。这个库已经支持在浏览器端调用相机的操作,但是它依赖于一个名为getUserMedia的属性。物业移动端上的浏览器不太支持,只能间接上传图片解析二维码。

  GetUserMedia属性兼容的浏览器列表:

  首先感谢jsqrcode的开发者提供了这么优秀的分析二维码的代码,减轻了我的工作量。Jsqrcode地址:点击我

  我的代码基址:点击我。

  1.需要解决的问题:

  1.可以在微博客户端调用摄像头扫描二维码进行分析;

  2.能够扫描二维码,并在原生浏览器和微信客户端进行分析;

  2.优势:

  web或h5终端可以直接完成扫码;

  3.缺点:

  如果图片不清晰,很容易解析失败(拍照和扫描图片需要镜头靠近二维码),与原生调用的相机分辨率相比会有1-2秒的延迟。说明:

  这个插件需要使用使用方法:和zepto.js或者jQuery.js

  1.在需要使用的页面中,按照以下顺序介绍lib目录下的js文件复制代码。代码如下:

  script src= lib/zepto . js /script

  script src= lib/QR code . lib . min . js /script

  script src= lib/QR code . js /script

  2.自定义按钮的html样式

  因为插件需要使用输入类型=file/,所以html结构在网页上有固定的显示样式。为了自定义按钮样式,我们可以按照如下示例代码结构嵌套代码复制代码:

   QR-BTN 节点-类型= jsbridge 扫描二维码1

  input-type= js bridge type= file name= my photo value= scan QR code 1 /

  /div

  然后设置输入按钮的css隐藏按钮。例如,我使用属性选择器复制代码,如下所示:

  输入[node-type=jsbridge]{

  可见性:隐藏;

  }

  这里我们只需要根据自己的需求来定义class=qr-btn 的样式。

  3.初始化Qrcode对象复制页面上的代码代码,如下所示:

  //初始化扫描二维码按钮,传入自定义节点类型属性。

  $(function() {

  QR code . init($([node-type=js bridge]);

  });

  主要代码分析复制代码如下:

  (函数($) {

  var Qrcode=function(tempBtn) {

  //这个对象只支持在微博域解析,也就是说不在微博域的页面只能使用第二种方案解析二维码。

  如果(窗口。WeiboJSBridge) {

  $(tempBtn)。on(点击,this . Weibo bridge);

  }否则{

  $(tempBtn)。on(change ,this . getimgfile);

  }

  };

  Qrcode.prototype={

  weiBoBridge:函数(){

  weibojsbridge . invoke( scan QR code ,null,function(params) {

  //获取扫码结果

  location . href=params . result;

  });

  },

  getImgFile: function() {

  var _ this _=this

  var imgFile=$(this)[0]。文件;

  var oFile=img file[0];

  var of reader=new FileReader();

  var rFilter=/^(?image \/BMP image \/cis \-cod image \/gif image \/ief image \/JPEG image \/JPEG image \/pipeg image \/png image \/SVG \ XML image \/tiff image \/x \-CMU \-raster image \/x \-cmx image \/x \-icon image \/x \-portable \-any map image \/x \-portable \-位图 image \/image

  if (imgFile.length===0) {

  返回;

  }

  如果(!rFilter.test(oFile.type)) {

  Alert(选择正确的图片格式!);

  返回;

  }

  //成功读取图片后执行的代码

  of reader . onload=function(of event){

  QR code . decode(of event . target . result);

  QR code . callback=function(data){

  //获取扫码结果

  location.href=data

  };

  };

  of reader . readasdataurl(oFile);

  },

  destory:函数(){

  $(tempBtn).关(点击);

  }

  };

  //初始化

  Qrcode.init=function(tempBtn) {

  var _ this _=这个

  var inputDom

  tempBtn.each(function() {

  new _ this _($(this));

  });

  $([node-type=qr-btn]).on(click ,function() {

  $(这个)。查找([node-type=jsbridge])[0].单击();

  });

  };

  窗户Qrcode=Qrcode。

  })(窗口。泽普托?zepto:jQuery);样例展示

  1.呼起前的页面

  2.呼起后的页面

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: