70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
|
|
(() => {
|
||
|
|
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
|
||
|
|
}
|
||
|
|
};
|
||
|
|
})();
|