rapid-unipay
Version:
UnionPay module
66 lines (63 loc) • 1.98 kB
JavaScript
/**
* Copyright (c) 2017 Lucky Byte, Inc.
*/
const debug = require('debug')('unipay');
const winston = require('winston');
/**
* 构造前台通知 HTML 响应
*
* 参数
* succeed: 是否是成功响应
*
* 返回
* 返回一个 HTML 文件,其中会调用 postMessage() 方法传递消息.
* 这个函数主要与 React Native WebView 组件 API 配合工作,
* 如果采用其它 WebView API(Android 或 iOS 原生 API),不要使用这个函数.
*/
const front_html = async (succeed) => {
const message = succeed ? 'success' : 'failed';
return `
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<meta name="author" content="Lucky Byte, Inc.">
</head>
<body>
<script type='text/javascript'>
function awaitPostMessage() {
var isReactNativePostMessageReady = false;
var queue = [];
var currentPostMessageFn = function store(message) {
queue.push(message);
};
if (!isReactNativePostMessageReady) {
Object.defineProperty(window, "postMessage", {
configurable: true,
enumerable: true,
get() {
return currentPostMessageFn;
},
set(fn) {
currentPostMessageFn = fn;
isReactNativePostMessageReady = true;
setTimeout(sendQueue, 0);
}
});
}
function sendQueue() {
while (queue.length > 0) {
window.postMessage(queue.shift());
}
}
}
awaitPostMessage();
window.postMessage('${message}');
</script>
<noscript>
非常抱歉,您的浏览器未开启 JavaScript 支持!
</noscript>
</body>
</html>
`;
}
module.exports = front_html;