hatom-js
Version:
npm 插件版本 hatom.js
1 lines • 2.11 kB
JavaScript
!function(){if(window.WebViewJavascriptBridge)return;let e=[],n=[];const t={},r="https",a={};let i,o=1;function s(){let e=document.createElement("iframe");return e.style.display="none",d()&&(e.src=r+"://__bridge_loaded__"),document.documentElement.appendChild(e),function(e){setTimeout((()=>{e.remove(),e=null}),500)}(e),e}function c(){return!!(navigator.userAgent.toLowerCase().indexOf("android")>-1)}function d(){const e=navigator.userAgent.toLowerCase();return!!(e.indexOf("iphone")>-1||e.indexOf("ipad")>-1)}function l(n,t){if(t){const e="cb_"+o+++"_"+(new Date).getTime();a[e]=t,n.callbackId=e}e.push(n),function(e,n=1e3,t=!1){i&&clearTimeout(i),t&&!i&&e.apply(this,arguments),i=setTimeout((()=>{e.apply(this,arguments)}),n)}((()=>{let e=s();d()?e.src=r+"://__wvjb_queue_message__":c()&&(e.src="yy://__QUEUE_MESSAGE__/")}),10)}function u(e){setTimeout((function(){const n=JSON.parse(e);let r;if(n.responseId){if(r=a[n.responseId],!r)return;r(n.responseData),1!==JSON.parse(n.responseData).code&&delete a[n.responseId]}else{if(n.callbackId){const e=n.callbackId;r=function(n){l({responseId:e,responseData:n})}}let e=f._messageHandler;n.handlerName&&(e=t[n.handlerName]);try{e(n.data,r)}catch(e){"undefined"!=typeof console&&console.log("WebViewJavascriptBridge: WARNING: javascript handler threw.",n,e)}}}))}var f=window.WebViewJavascriptBridge={init:function(e){if(f._messageHandler)throw new Error("WebViewJavascriptBridge.init called twice");f._messageHandler=e;const t=n;if(n=null,t&&t.length)for(let e=0;e<t.length;e++)u(t[e])},send:function(e,n){l({data:e},n)},registerHandler:function(e,n){t[e]=n},removeRegisterHandler:function(e,n){t.hasOwnProperty(e)?(delete t[e],n(`已取消注册${e}方法`)):n("查无此方法")},callHandler:function(e,n,t){l({handlerName:e,data:n},t)},_fetchQueue:function(){const n=JSON.stringify(e);if(e=[],d())return n;c()&&(s().src="yy://return/_fetchQueue/"+encodeURIComponent(n))},_handleMessageFromNative:function(e){n?n.push(e):u(e)}};const p=document;s();const _=p.createEvent("Events");_.initEvent("WebViewJavascriptBridgeReady"),_.bridge=f,p.dispatchEvent(_)}();