Files
qingdao-employment-service/static/js/jsbridge.js

70 lines
2.3 KiB
JavaScript
Raw Normal View History

(() => {
if (!/android/.test(navigator.userAgent.toLowerCase())) {
console.error("当前环境不支持WebView桥接通信, 请检查是否为安卓环境");
return
}
let bridge;
function setupWebViewJavascriptBridge(callback) {
return new Promise((reslove, reject) => {
if (window.WebViewJavascriptBridge) {
bridge = window.WebViewJavascriptBridge;
callback && callback()
reslove()
} else {
document.addEventListener(
"WebViewJavascriptBridgeReady",
function () {
bridge = window.WebViewJavascriptBridge;
callback && callback()
reslove()
},
false
);
}
})
}
let funcs = {}
setupWebViewJavascriptBridge(() => {
bridge.init()
bridge.registerHandler("ampeHHCommunication", (data) => {
console.log('[zyh][registerHandler]',data);
data = JSON.parse(data || '{}');
let eventName = data.eventName || '{}';
let eventData = JSON.parse(data.eventData || '{}');
if (funcs[eventName]) {
for (let callback of funcs[eventName]) {
callback({type: eventName, data: eventData})
}
}
});
})
window.hh = {
async call(funcName, params, callback) {
if (!bridge) {
await setupWebViewJavascriptBridge()
}
bridge.callHandler(funcName, params, callback);
},
async on(funcName, callback) {
if (funcs[funcName]) {
funcs[funcName].add(callback)
} else {
funcs[funcName] = new Set([callback])
}
},
off(funcName, callback) {
if (!funcs[funcName]) {
return false
}
if (!callback) {
return delete funcs[funcName]
}
let res = funcs[funcName].delete(callback)
if(funcs[funcName].size <= 0) {
delete funcs[funcName]
}
return res
}
};
})();