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 相关文章推荐
JS 实现完美include载入实现代码
Aug 05 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
Nov 28 Javascript
javascript中AJAX用法实例分析
Jan 30 Javascript
AngularJS单选框及多选框实现双向动态绑定
Jan 13 Javascript
Angular ng-repeat 对象和数组遍历实例
Sep 14 Javascript
JS常用函数和常用技巧小结
Oct 15 Javascript
浅谈vuex之mutation和action的基本使用
Aug 29 Javascript
vue-router实现组件间的跳转(参数传递)
Nov 07 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
微信小程序class封装http代码实例
Aug 24 Javascript
layui关闭层级、简单监听的实例
Sep 06 Javascript
详解JavaScript 高阶函数
Sep 14 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
关于在php.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
详解django中Template语言
2020/02/22 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
Python将字典转换为XML的方法
2020/08/01 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
2014年会策划方案
2014/05/11 职场文书
后备干部推荐材料
2014/12/24 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python