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+Dhtml:WEB程序员简易开发工具包(预先体验版)
Nov 07 Javascript
JavaScript编程开发中的五个实用小技巧
Jul 22 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
Jul 03 Javascript
解析jQuery与其它js(Prototype)库兼容共存
Jul 04 Javascript
js之onload事件的一点使用心得
Aug 14 Javascript
jquery选择器之内容过滤选择器详解
Jan 27 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
学习jQuey中的return false
Dec 18 Javascript
JavaScript表单焦点自动切换代码
Jul 24 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 Javascript
vue.js实现含搜索的多种复选框(附源码)
Mar 23 Javascript
vue项目刷新当前页面的三种方法
Dec 04 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
ThinkPHP空模块和空操作详解
2014/06/30 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
js技巧--转义符"\"的妙用
2007/01/09 Javascript
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
深入理解node.js http模块
2018/01/24 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
Python中threading模块join函数用法实例分析
2015/06/04 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
python中的测试框架
2020/11/13 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
三年大学生活自我鉴定
2014/01/21 职场文书
通用自荐信范文
2014/03/14 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
SQL 聚合、分组和排序
2021/11/11 MySQL