UNPKG

hybrid-bridge-js

Version:

A JavaScript bridge for communication between Web and Native (iOS/Android)

3 lines (2 loc) 1.7 kB
const e={_callbacks:{},_handlers:{},_timeout:5e3,invoke:(r,o={})=>new Promise(((i,a)=>{if("string"!=typeof r)return void a(new Error("Method name must be a string"));const s=`cb_${Date.now()}_${Math.random().toString(36).substr(2,6)}`,n=setTimeout((()=>{e._callbacks[s]&&(a(new Error(`Native method ${r} timeout`)),delete e._callbacks[s])}),e._timeout);e._callbacks[s]=(r,o)=>{clearTimeout(n),o?a(new Error(o)):i(r),delete e._callbacks[s]};const t={method:r,data:o,callbackId:s};try{window.webkit?.messageHandlers?.[r]?window.webkit.messageHandlers[r].postMessage(t):window.AndroidBridge?.[r]?window.AndroidBridge[r](JSON.stringify(t)):a(new Error(`Native method ${r} is not available`))}catch(e){a(new Error(`JSBridge invoke error: ${e.message}`))}})),receive(r,o,i=null){e._callbacks[r]?e._callbacks[r](o,i):console.warn(`JSBridge receive warning: callbackId ${r} is expired or invalid`)},register(r,o){"string"==typeof r&&"function"==typeof o?e._handlers[r]=o:console.error("JSBridge.register 参数错误")},call(r,o={},i=null){if(e._handlers[r])try{e._handlers[r](o,(r=>{i&&e._sendToNative(i,r)}))}catch(e){console.error(`JSBridge call error: ${e.message}`)}else console.warn(`JSBridge call warning: H5 method ${r} is not registered`)},_sendToNative(e,r){try{window.webkit?.messageHandlers?.receiveFromH5?window.webkit.messageHandlers.receiveFromH5.postMessage({callbackId:e,result:r}):window.AndroidBridge?.receiveFromH5?window.AndroidBridge.receiveFromH5(JSON.stringify({callbackId:e,result:r})):console.warn("JSBridge: No receiveFromH5 method found in Native")}catch(e){console.error(`JSBridge _sendToNative error: ${e.message}`)}}};export{e as default}; //# sourceMappingURL=bridge.esm.js.map