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 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
js实现局部页面打印预览原理及示例代码
Jul 03 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
jQuery hover事件简单实现同时绑定2个方法
Jun 07 Javascript
JS之相等操作符详解
Sep 13 Javascript
微信小程序 swiper组件详解及实例代码
Oct 25 Javascript
ES6中字符串string常用的新增方法小结
Nov 07 Javascript
vue百度地图 + 定位的详解
May 13 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
Jul 25 Javascript
Vue.js实现可编辑的表格
Dec 11 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
Feb 12 Javascript
jQuery实现二级导航菜单的示例
Sep 30 jQuery
解决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
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
PHP 代码规范小结
2012/03/08 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
virtualenv介绍及简明教程
2020/06/23 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
办理暂住证介绍信
2014/01/11 职场文书
名人演讲稿范文
2014/09/16 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
聘用合同范本
2015/09/21 职场文书