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函数的4种调用方法详解
Apr 22 Javascript
jQuery取id有.的值的方法
May 21 Javascript
JS中Eval解析JSON字符串的一个小问题
Feb 21 Javascript
微信小程序 数据绑定详解及实例
Oct 25 Javascript
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
Nov 22 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
Jan 19 Javascript
angular4+百分比进度显示插件用法示例
May 05 Javascript
JS判断数组里是否有重复元素的方法小结
May 21 Javascript
webpack常用构建优化策略小结
Nov 21 Javascript
JS的时间格式化和时间戳转换函数示例详解
Jul 27 Javascript
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
解决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上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
深入分析PHP引用(&)
2014/09/04 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php读取csv文件并输出的方法
2015/03/14 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
基于Laravel 5.2 regex验证的正确写法
2019/09/29 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
Python os模块学习笔记
2015/06/21 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
python写一个随机点名软件的实例
2019/11/28 Python
基于Python测试程序是否有错误
2020/05/16 Python
python如何实现DES加密
2020/09/21 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
网络体系结构及协议的定义
2014/03/13 面试题
网络编辑求职信
2014/04/30 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
入党介绍人意见2015
2015/06/01 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python