增加扫码和显示二维码的功能
This commit is contained in:
parent
20ceec121d
commit
259b587bc5
6
assets/scripts/libs/html5-qrcode.min.js
vendored
Normal file
6
assets/scripts/libs/html5-qrcode.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -5,7 +5,9 @@ import init, {
|
|||||||
sign_for_tran,
|
sign_for_tran,
|
||||||
generate_sec_key,
|
generate_sec_key,
|
||||||
generate_scrypt_hash,
|
generate_scrypt_hash,
|
||||||
|
generate_qr,
|
||||||
} from '../../wasm/rustwallet.js';
|
} from '../../wasm/rustwallet.js';
|
||||||
|
import { QrScanner, showQr } from './qr_reading.js';
|
||||||
import { GoogleClient } from './google.client.js';
|
import { GoogleClient } from './google.client.js';
|
||||||
// call native method
|
// call native method
|
||||||
|
|
||||||
@ -97,7 +99,24 @@ window.jsb = {
|
|||||||
// END:: only for web
|
// END:: only for web
|
||||||
// BEGIN:: native method
|
// BEGIN:: native method
|
||||||
scanQRCode: function (funid, title) {
|
scanQRCode: function (funid, title) {
|
||||||
callNative({ action: 'scanQRCode', funid, title });
|
if (jc.wallet.platform === 'web') {
|
||||||
|
this.scaner = this.scaner || new QrScanner();
|
||||||
|
this.scaner.start(title,(result) => {
|
||||||
|
this.scaner.stop();
|
||||||
|
let data = {errcode: 0, data: result}
|
||||||
|
nativeCall(funid, JSON.stringify(data));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callNative({ action: 'scanQRCode', funid, title });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
showQRCode: function (funid, title) {
|
||||||
|
if (jc.wallet.platform === 'web') {
|
||||||
|
let str = generate_qr(title);
|
||||||
|
showQr(str);
|
||||||
|
} else {
|
||||||
|
callNative({ action: 'showQRCode', funid, title });
|
||||||
|
}
|
||||||
},
|
},
|
||||||
buyProduct: function (funid, productId, orderId) {
|
buyProduct: function (funid, productId, orderId) {
|
||||||
callNative({ action: 'buyProduct', funid, productId, orderId });
|
callNative({ action: 'buyProduct', funid, productId, orderId });
|
||||||
|
102
assets/scripts/libs/qr_reading.js
Normal file
102
assets/scripts/libs/qr_reading.js
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
import { Html5Qrcode, Html5QrcodeSupportedFormats } from "./html5-qrcode.min.js"
|
||||||
|
|
||||||
|
export class QrScanner {
|
||||||
|
constructor(domId) {
|
||||||
|
domId = domId || 'qr-container';
|
||||||
|
this.el = document.getElementById(domId);
|
||||||
|
if (!this.el) {
|
||||||
|
this.el = createDom();
|
||||||
|
}
|
||||||
|
this.render_id = 'qr-reader';
|
||||||
|
this.config = { fps: 4, qrbox: (width, height) => {return { width: width * 0.8, height: height * 0.9 }}};
|
||||||
|
this.scanner = new Html5Qrcode(this.render_id, { });
|
||||||
|
this.el.addEventListener('click', this.stop.bind(this));
|
||||||
|
document.getElementById('qr-close').addEventListener('click', this.stop.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
start(title,onScanSuccess) {
|
||||||
|
this.el.style.display = 'flex';
|
||||||
|
document.getElementById('qr-title').innerText = title;
|
||||||
|
const _onScanSuccess = (decodedText, decodedResult) => {
|
||||||
|
onScanSuccess(decodedText);
|
||||||
|
}
|
||||||
|
const startScanner = () => {
|
||||||
|
this.scanner.start({ facingMode: "environment" }, this.config, _onScanSuccess)
|
||||||
|
.then((_) => {
|
||||||
|
console.log('start scan');
|
||||||
|
}, (e) => {
|
||||||
|
console.log('scan error: ', e);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
startScanner();
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
if (this.scanner && this.scanner.getState() === 2){
|
||||||
|
this.scanner.stop().then((_) => {
|
||||||
|
console.log('stop scan')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.el.style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export function showQr(svgStr) {
|
||||||
|
let el = document.getElementById('qr-container');
|
||||||
|
if (!el) {
|
||||||
|
el = createDom();
|
||||||
|
}
|
||||||
|
document.getElementById('qr-title').innerText = '';
|
||||||
|
let container = document.getElementById('qr-reader');
|
||||||
|
container.innerHTML = svgStr;
|
||||||
|
el.style.display = 'flex';
|
||||||
|
}
|
||||||
|
function createDom() {
|
||||||
|
addStyle(css);
|
||||||
|
let container = document.createElement('div');
|
||||||
|
container.id = 'qr-container';
|
||||||
|
container.className = 'qr-container';
|
||||||
|
let h2 = document.createElement('h2');
|
||||||
|
h2.innerText = 'Scan QR Code';
|
||||||
|
h2.id = 'qr-title';
|
||||||
|
container.appendChild(h2);
|
||||||
|
let div = document.createElement('div');
|
||||||
|
div.id = 'qr-reader';
|
||||||
|
div.className = 'qr-div';
|
||||||
|
container.appendChild(div);
|
||||||
|
let button = document.createElement('button');
|
||||||
|
button.innerText = 'Close';
|
||||||
|
button.id = 'qr-close';
|
||||||
|
container.appendChild(button);
|
||||||
|
document.body.appendChild(container);
|
||||||
|
var closeMe = function(e) {
|
||||||
|
if (e.target.id !== 'qr-container' && e.target.id !== 'qr-close') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
container.style.display = 'none';
|
||||||
|
}
|
||||||
|
container.addEventListener('click', closeMe);
|
||||||
|
button.addEventListener('click', closeMe);
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
const css = `
|
||||||
|
.qr-container {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
left: 0px;
|
||||||
|
top: 0px;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
margin: auto;
|
||||||
|
display: none;
|
||||||
|
background: #0000006b;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.qr-div {
|
||||||
|
position: relative;
|
||||||
|
padding: 0px;
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
`
|
18
assets/scripts/libs/utils.js
Normal file
18
assets/scripts/libs/utils.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
function addStyle(content) {
|
||||||
|
var target = document.head || document.getElementsByTagName('head')[0];
|
||||||
|
var node = document.createElement("style");
|
||||||
|
node.innerHTML = content;
|
||||||
|
target.appendChild(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
function curry(func) {
|
||||||
|
return function curried(...args) {
|
||||||
|
if (args.length >= func.length) {
|
||||||
|
return func.apply(this, args);
|
||||||
|
} else {
|
||||||
|
return function(...args2) {
|
||||||
|
return curried.apply(this, args.concat(args2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@ -165,11 +165,14 @@ if (jc.wallet.platform !== 'web') {
|
|||||||
callProxyMethod.apply(this, args);
|
callProxyMethod.apply(this, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
function showQRCode(...args) {
|
// function showQRCode(...args) {
|
||||||
args.unshift('showQRCode');
|
// args.unshift('showQRCode');
|
||||||
callProxyMethod.apply(this, args);
|
// callProxyMethod.apply(this, args);
|
||||||
}
|
// }
|
||||||
|
// function scanQRCode(...args) {
|
||||||
|
// args.unshift('scanQRCode');
|
||||||
|
// callProxyMethod.apply(this, args);
|
||||||
|
// }
|
||||||
// function showWebPage(...args) {
|
// function showWebPage(...args) {
|
||||||
// try {
|
// try {
|
||||||
// jsb.showWebPage(...args);
|
// jsb.showWebPage(...args);
|
||||||
|
@ -43,7 +43,10 @@ const pages = {
|
|||||||
let res = await callMethod('currentChain');
|
let res = await callMethod('currentChain');
|
||||||
console.log(res);
|
console.log(res);
|
||||||
},
|
},
|
||||||
|
scanQRCode: async function () {
|
||||||
|
let res = await callMethod('scanQRCode', 'scan');
|
||||||
|
console.log(res);
|
||||||
|
},
|
||||||
showQRCode: async function () {
|
showQRCode: async function () {
|
||||||
let res = await callMethod('showQRCode', address);
|
let res = await callMethod('showQRCode', address);
|
||||||
console.log(res);
|
console.log(res);
|
||||||
|
@ -42,7 +42,6 @@
|
|||||||
<div class='app' id='app'>
|
<div class='app' id='app'>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
/**
|
/**
|
||||||
* 加载外部js
|
* 加载外部js
|
||||||
@ -69,6 +68,7 @@
|
|||||||
var scripts = [
|
var scripts = [
|
||||||
['assets/scripts/libs/jcwallet.js'],
|
['assets/scripts/libs/jcwallet.js'],
|
||||||
['assets/scripts/libs/main.js'],
|
['assets/scripts/libs/main.js'],
|
||||||
|
['assets/scripts/libs/utils.js'],
|
||||||
['assets/scripts/libs/native_bridge.js', 1],
|
['assets/scripts/libs/native_bridge.js', 1],
|
||||||
['assets/scripts/main_native_inject.js'],
|
['assets/scripts/main_native_inject.js'],
|
||||||
['assets/scripts/run_sample.js'],
|
['assets/scripts/run_sample.js'],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user