vue实现与安卓、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 = ateElement('iframe')
WVJBIframe.style.display = 'none'
WVJBIframe.src = '__bridge_loaded__'
document.documentElement.appendChild(WVJBIframe)
setTimeout(() => {
veChild(WVJBIframe)
}, 0)
}
function callhandler (name, data, callback) {
setupWebViewJavascriptBridge(function (bridge) {
iframe参数传递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) {
callback(data, responseCallback)
})
})
}
安卓实现⽅案
调⽤原⽣⽅法
window.HTTP_TEST.functionName()
定义回调⽅法/注册⽅法给原⽣
window['functionName'] = res => {}
特殊说明
1. 安卓在交互中的参数传递只能⽀持string类型,对象参数要转成string传递
2. 因为安卓的回调⽅法名是固定的,同⼀⽅法同时请求两次以上时,有可能只得到⼀次回调。如果⽤随机数处理就会不断
地在window上挂载新的函数,调⽤次数过多可能会出问题,所以⽬前是避免同时请求同⼀⽅法来解决的。如果有需求避免不了,那还是要⽤随机数解决。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。