let u = navigator.userAgent; let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端 let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 // 执行回调函数 function setupWebViewJavascriptBridge(callback) { if (isAndroid) { // 如果该对象已存在则直接执行 if (window.WebViewJavascriptBridge) { callback(window.WebViewJavascriptBridge) } else { // 否则添加事件监听在执行 document.addEventListener( 'WebViewJavascriptBridgeReady', function () { callback(window.WebViewJavascriptBridge) }, false ) } return; } if (isIOS) { console.log('ios==='); 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 = 'wvjbscheme://__bridge_loaded__'; document.documentElement.appendChild(WVJBIframe); setTimeout(function () { document.documentElement.removeChild(WVJBIframe) }, 0) } } // 注册回调函数 setupWebViewJavascriptBridge(function (bridge) { if (isAndroid) { //初始化 bridge.init(function (message, responseCallback) { var data = { 'Javascript Responds': 'Wee!' }; responseCallback(data); }) } }) // 暴露当前模块的方法 export default { // js调APP方法 (参数分别为:app提供的方法名 传给app的数据 回调) callHandler(name, data, callback) { setupWebViewJavascriptBridge(bridge => { bridge.callHandler(name, data, callback) }) }, // APP调js方法 (参数分别为:js提供的方法名 回调) registerHandler(name, callback) { setupWebViewJavascriptBridge(bridge => { bridge.registerHandler(name, (data, responseCallback) => { callback(data, responseCallback) }) }) } }