hybrid-bridge-js
Version:
A JavaScript bridge for communication between Web and Native (iOS/Android)
3 lines (2 loc) • 1.92 kB
JavaScript
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e="undefined"!=typeof globalThis?globalThis:e||self).JSBridge=r()}(this,(function(){"use strict";const e={_callbacks:{},_handlers:{},_timeout:5e3,invoke:(r,o={})=>new Promise(((i,n)=>{if("string"!=typeof r)return void n(new Error("Method name must be a string"));const t=`cb_${Date.now()}_${Math.random().toString(36).substr(2,6)}`,s=setTimeout((()=>{e._callbacks[t]&&(n(new Error(`Native method ${r} timeout`)),delete e._callbacks[t])}),e._timeout);e._callbacks[t]=(r,o)=>{clearTimeout(s),o?n(new Error(o)):i(r),delete e._callbacks[t]};const a={method:r,data:o,callbackId:t};try{window.webkit?.messageHandlers?.[r]?window.webkit.messageHandlers[r].postMessage(a):window.AndroidBridge?.[r]?window.AndroidBridge[r](JSON.stringify(a)):n(new Error(`Native method ${r} is not available`))}catch(e){n(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}`)}}};return e}));
//# sourceMappingURL=bridge.js.map