jsbridge的js封裝


/*
注意:源生app須要配置jsbridge的環境,而在前端頁面中須要下方封裝代碼,既能夠達到調用app方法的功能和註冊供app調用的方法一、註冊方法:註冊後,供app調用,註冊時,同名函數,下一個會覆蓋上一個二、調用函數,能夠調用屢次三、使用時,只須要導入便可 如:import {setbridge, getbridge} from 'jsbridge'四、使用方式:調用app方法: getbridge(functionName,data,callback) 第一個參數是app的函數名字;第2個參數是要傳遞給app方法的數據,數據類型不限(具體要看app接收什麼類型的數據,如:json,string,number等)第3個參數是一個函數,函數內隱含回調數據data,調用例子以下:getbridge('closePage','關閉頁面',(data) => { // 'app返回過來的數據:'+data})註冊方法,供app使用:setbridge(functionName,data,callback) 調用方式相似於上方說明第一個參數:函數名字,能夠自定義第2個參數,app調用該方法是,須要給app傳遞的數據第3個參數,回調函數,默認函數有一個數據data參數,獲得的是app返回給前臺js的數據*/function setupWebViewJavascriptBridge(callback) { if (/android/.test(navigator.userAgent.toLowerCase())) { if (window.WebViewJavascriptBridge) { callback(window.WebViewJavascriptBridge); } else { document.addEventListener( 'WebViewJavascriptBridgeReady', function() { callback(window.WebViewJavascriptBridge); }, false ); } } else if (/ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase())) { if (window.WebViewJavascriptBridge) { return callback(window.WebViewJavascriptBridge); } if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); } window.WVJBCallbacks = [callback]; var WVJBIframe = document.createElement('iframe'); WVJBIframe.style.display = 'none'; WVJBIframe.src = 'https://__bridge_loaded__'; document.documentElement.appendChild(WVJBIframe); setTimeout(function() { document.documentElement.removeChild(WVJBIframe); }, 100); }}setupWebViewJavascriptBridge(function(bridge) { if (/android/.test(navigator.userAgent.toLowerCase())) { bridge.init(function(message, responseCallback) { // 'JS got a message', message var data = { 'Javascript Responds': '測試中文!' }; if (responseCallback) { // 'JS responding with', data responseCallback(data); } }); }});// 初始化jsbridgefunction setbridge(funName, dataJson, callback) { setupWebViewJavascriptBridge(function(bridge) { bridge.registerHandler(funName, function(data, responseCallback) { // '註冊函數,從app拿到的數據', data callback && callback(data); var responseData = dataJson; // 'js返回給app的數據', responseData responseCallback(responseData); }); });}function getbridge(funName, dataJson, callback) { setupWebViewJavascriptBridge(function(bridge) { bridge.callHandler(funName, dataJson, function(response) { callback && callback(response); }); });}export { setbridge, getbridge };
相關文章
相關標籤/搜索