使用cordova能夠實現掃描二維碼或者條形碼的功能,可是環境配置比較複雜,須要額外安裝插件。javascript
採用html5+一樣也能夠實現二維碼掃描功能,配合Hbuilder打包(必須),方便快捷,而且還能夠修改掃描框的樣式,更強的靈活度。實現方法以下:css
新建2個html頁面,一個做爲頁面的展現,一個用做掃描二維碼界面html
做爲頁面展現的index.html頁面html5
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="HandheldFriendly" content="true" /> <meta name="MobileOptimized" content="320" /> <title>Hello H5+</title> <script type="text/javascript" src="js/common.js"></script> <script type="text/javascript"> function scaned(t, r, f) { var inputContent = document.getElementById("input"); inputContent.value = r; } </script> <style type="text/css" media="screen"> .hdata { color: #e1673e; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } </style> </head> <body> <div id="dcontent" class="dcontent"> <div class="button" onclick="clicked('test1.html',true,true)">掃一掃</div> <input type="text" id="input" /> </div> </body> </html>
common.js是用Hbuilder新建移動app hello html5+項目時生成的java
掃描二維碼頁面test1.htmlweb
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="HandheldFriendly" content="true" /> <meta name="MobileOptimized" content="320" /> <title>Hello H5+</title> <script type="text/javascript" src="js/common.js"></script> <script type="text/javascript"> var ws = null, wo = null; var scan = null, domready = false; // H5 plus事件處理 function plusReady() { if(ws || !window.plus || !domready) { return; } // 獲取窗口對象 ws = plus.webview.currentWebview(); wo = ws.opener(); // 開始掃描 ws.addEventListener('show', function() { var styles = { frameColor: "#65e102", scanbarColor: "#b7e871", background: "#000" }; //邊框屬性 var filter; //掃碼格式 空爲全類型,不能省略 scan = new plus.barcode.Barcode('bcid', filter, styles); scan.onmarked = onmarked; scan.start({ conserve: true, filename: '_doc/barcode/' }); }, false); // 顯示頁面並關閉等待框 ws.show('pop-in'); wo.evalJS('closeWaiting()'); } if(window.plus) { plusReady(); } else { document.addEventListener('plusready', plusReady, false); } // 監聽DOMContentLoaded事件 document.addEventListener('DOMContentLoaded', function() { domready = true; plusReady(); }, false); // 二維碼掃描成功 function onmarked(type, result, file) { switch(type) { case plus.barcode.QR: type = 'QR'; break; case plus.barcode.EAN13: type = 'EAN13'; break; case plus.barcode.EAN8: type = 'EAN8'; break; default: type = '其它' + type; break; } result = result.replace(/\n/g, ''); wo.evalJS("scaned('" + type + "','" + result + "','" + file + "');"); back(); } // 從相冊中選擇二維碼圖片 function scanPicture() { plus.gallery.pick(function(path) { plus.barcode.scan(path, onmarked, function(error) { plus.nativeUI.alert('沒法識別此圖片'); }); }, function(err) { console.log('Failed: ' + err.message); }); } </script> <style type="text/css"> #bcid { width: 100%; position: absolute; top: 0px; bottom: 44px; text-align: center; } .tip { color: #FFFFFF; font-weight: bold; text-shadow: 0px -1px #103E5C; } footer { width: 100%; height: 44px; position: absolute; bottom: 0px; line-height: 44px; text-align: center; color: #FFF; } .fbt { width: 50%; height: 100%; background-color: #FFCC33; float: left; } .fbt:active { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.5); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.5); } </style> </head> <body style="background-color: #000000;"> <div id="bcid"> <div style="height:40%"></div> <p class="tip">...載入中...</p> </div> <footer> <div class="fbt" onclick="back()">取 消</div> <div class="fbt" onclick="scanPicture()">從相冊選擇二維碼</div> </footer> </body> </html>
設置掃描框特定樣式主要用到的代碼,默認是紅色的app
var styles = {
frameColor: "#65e102",
scanbarColor: "#b7e871",
background: "#000"
}; //邊框屬性
var filter; //掃碼格式 空爲全類型,不能省略
scan = new plus.barcode.Barcode('bcid', filter, styles);dom