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-Easyui 1.2 实现多层菜单效果的代码
Jan 13 Javascript
jQuery的each终止或跳过示例代码
Dec 12 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
Javascript中使用parseInt函数需要注意的问题
Apr 02 Javascript
JQuery日期插件datepicker的使用方法
Mar 03 Javascript
JavaScript定时器制作弹窗小广告
Feb 05 Javascript
AngularJS的脏检查深入分析
Apr 22 Javascript
命令行批量截图Node脚本示例代码
Jan 25 Javascript
详解vue 2.6 中 slot 的新用法
Jul 09 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
Vue开发环境中修改端口号的实现方法
Aug 15 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采集利器 Snoopy 试用心得
2011/07/03 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
原生js实现商品筛选功能
2019/10/28 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
2020/07/23 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python无损音乐搜索引擎实现代码
2018/02/02 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
深入浅析Python中的迭代器
2019/06/04 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
python中二分查找法的实现方法
2020/12/06 Python
大学生通用个人自我评价
2014/04/27 职场文书
环保倡议书300字
2014/05/15 职场文书
电工实训报告总结
2014/11/05 职场文书
劳模事迹材料范文
2014/12/24 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python