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 短路法代码精简
Aug 20 Javascript
使用javascript实现判断当前浏览器
Apr 14 Javascript
js确认框confirm()用法实例详解
Jan 07 Javascript
Js获取图片原始宽高的实现代码
May 17 Javascript
微信小程序 定位到当前城市实现实例代码
Feb 23 Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 Javascript
深入理解ES6的迭代器与生成器
Aug 19 Javascript
vue-router实现tab标签页(单页面)详解
Oct 17 Javascript
解决vue中修改export default中脚本报一大堆错的问题
Aug 27 Javascript
vue-cli3 配置开发与测试环境详解
May 17 Javascript
node 文件上传接口的转发的实现
Sep 23 Javascript
微信小程序如何实现在线客服功能
Oct 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
PHP安装全攻略:APACHE
2006/10/09 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP递归算法的简单实例
2019/02/28 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python 网络编程常用代码段
2016/08/28 Python
python实现百度语音识别api
2018/04/10 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
python 初始化一个定长的数组实例
2019/12/02 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
生物科学系大学生的自我评价
2013/12/20 职场文书
初中音乐教学反思
2014/01/12 职场文书
办护照工作证明范本
2014/01/14 职场文书
工程安全员岗位职责
2014/03/09 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
安全检查汇报材料
2014/12/26 职场文书
安全员岗位职责
2015/02/10 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
如何优化vue打包文件过大
2022/04/13 Vue.js