vue实现与安卓、IOS交互的方法
程序员文章站
2023-10-28 20:57:46
方案背景
ios用的是jsbridge插件实现调用、传参、回调的
安卓是在window挂载方法和挂载回调的
ios实现方案
调用原生方法封装如下...
方案背景
- ios用的是jsbridge插件实现调用、传参、回调的
- 安卓是在window挂载方法和挂载回调的
ios实现方案
调用原生方法封装如下
function setupwebviewjavascriptbridge (callback) { if (window.webviewjavascriptbridge) { return callback(window.webviewjavascriptbridge) } if (window.wvjbcallbacks) { return window.wvjbcallbacks.push(callback) } window.wvjbcallbacks = [callback] let wvjbiframe = document.createelement('iframe') wvjbiframe.style.display = 'none' wvjbiframe.src = 'https://__bridge_loaded__' document.documentelement.appendchild(wvjbiframe) settimeout(() => { document.documentelement.removechild(wvjbiframe) }, 0) } function callhandler (name, data, callback) { setupwebviewjavascriptbridge(function (bridge) { bridge.callhandler(name, data, callback) }) }
实际调用如下
callhandler(functionname: string, params: object, res => {})
注册方法给原生
registerhandler (name, callback) { // 安卓 window[name] = res => { let data = json.parse(res) callback(data) } // ios setupwebviewjavascriptbridge(function (bridge) { bridge.registerhandler(name, function (data, responsecallback) { callback(data, responsecallback) }) }) }
安卓实现方案
调用原生方法
window.http_test.functionname()
定义回调方法/注册方法给原生
window['functionname'] = res => {}
特殊说明
- 安卓在交互中的参数传递只能支持string类型,对象参数要转成string传递
- 因为安卓的回调方法名是固定的,同一方法同时请求两次以上时,有可能只得到一次回调。如果用随机数处理就会不断地在window上挂载新的函数,调用次数过多可能会出问题,所以目前是避免同时请求同一方法来解决的。如果有需求避免不了,那还是要用随机数解决。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。