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 操作Array数组的方法及属性实例解析
Jan 08 Javascript
简单选项卡 js和jquery制作方法分享
Feb 26 Javascript
js实现点击图片改变页面背景图的方法
Feb 28 Javascript
理解Javascript的call、apply
Dec 16 Javascript
JavaScript简单实现弹出拖拽窗口(一)
Jun 17 Javascript
jquery实用技巧之输入框提示语句
Jul 28 Javascript
JavaScript数据类型学习笔记分享
Sep 01 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 Javascript
jQuery列表动态增加和删除的实现方法
Nov 05 jQuery
vue的webcamjs集成方式
Nov 16 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
神族 PROTOSS 概述
2020/03/14 星际争霸
PHP排序算法的复习和总结
2012/02/15 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
Python将string转换到float的实例方法
2019/07/29 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
澳大利亚相机之家:Camera House
2017/11/30 全球购物
高中历史教学反思
2014/02/08 职场文书
进口业务员岗位职责
2014/04/06 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
初三毕业评语
2014/12/26 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
远程教育学习心得体会
2016/01/23 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
微信小程序和php的登录实现
2021/04/01 PHP