vue实现与安卓、IOS交互的方法


Posted in Javascript onNovember 02, 2018

方案背景

  • 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 => {}

特殊说明

  1. 安卓在交互中的参数传递只能支持string类型,对象参数要转成string传递
  2. 因为安卓的回调方法名是固定的,同一方法同时请求两次以上时,有可能只得到一次回调。如果用随机数处理就会不断地在window上挂载新的函数,调用次数过多可能会出问题,所以目前是避免同时请求同一方法来解决的。如果有需求避免不了,那还是要用随机数解决。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery操作表格(table)的常用方法、技巧汇总
Apr 12 Javascript
JavaScript中实现sprintf、printf函数
Jan 27 Javascript
js获取checkbox值的方法
Jan 28 Javascript
js面向对象的写法
Feb 19 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
Mar 09 Javascript
vue中子组件调用兄弟组件方法
Jul 06 Javascript
vue删除html内容的标签样式实例
Sep 13 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
Jul 22 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 Javascript
Vue设置长时间未操作登录自动到期返回登录页
Jan 22 Javascript
解决iview多表头动态更改列元素发生的错误的方法
Nov 02 #Javascript
JavaScript 点击触发复制功能实例详解
Nov 02 #Javascript
微信小程序实现留言板(Storage)
Nov 02 #Javascript
微信小程序实现留言板功能
Nov 02 #Javascript
小程序实现留言板
Nov 02 #Javascript
js中的闭包实例展示
Nov 01 #Javascript
微信小程序实现登录遮罩效果
Nov 01 #Javascript
You might like
终于听上了直流胆调频
2021/03/02 无线电
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
php微信开发自定义菜单
2016/08/27 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
详解PyTorch批训练及优化器比较
2018/04/28 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
Python缓存技术实现过程详解
2019/09/25 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
创业大赛策划书
2014/03/01 职场文书
环保倡议书怎么写
2014/05/16 职场文书
委托书如何写
2014/08/30 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
爱国教育主题班会
2015/08/14 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书