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 相关文章推荐
javascript与asp.net(c#)互相调用方法
Dec 13 Javascript
JavaScript arguments 多参传值函数
Oct 24 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
Sep 19 Javascript
angularJS Provider、factory、service详解及实例代码
Sep 21 Javascript
浅谈javascript alert和confirm的美化
Dec 15 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
Jul 05 Javascript
jQuery完成表单验证的实例代码(纯代码)
Sep 30 jQuery
JS面向对象之单选框实现
Jan 17 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
js实现一个简易计算器
2020/03/30 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
Python的设计模式编程入门指南
2015/04/02 Python
Python实现对象转换为xml的方法示例
2017/06/08 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
深入浅析Python中的迭代器
2019/06/04 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
快速创建python 虚拟环境
2020/11/28 Python
个人工作总结范文2014
2014/11/07 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
mysql的单列多值存储实例详解
2022/04/05 MySQL