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入门教程(1) 什么是JS
Jan 31 Javascript
javascript 处理事件绑定的一些兼容写法
Dec 24 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
Feb 23 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
Dec 06 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
EasyUI中实现form表单提交的示例分享
Mar 01 Javascript
JavaScript获取按钮所在form表单id的方法
Apr 02 Javascript
javascript中判断json的方法总结
Aug 27 Javascript
封装属于自己的JS组件
Jan 27 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
手写Node静态资源服务器的实现方法
Mar 20 Javascript
js html实现计算器功能
Nov 13 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 字符串操作入门教程
2006/12/06 PHP
PHP XML数据解析代码
2010/05/26 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
详解jQuery选择器
2016/12/21 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
python在windows下实现备份程序实例
2014/07/04 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
python pillow模块使用方法详解
2019/08/30 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
Python实现对adb命令封装
2020/03/06 Python
python画环形图的方法
2020/03/25 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
幼儿园门卫岗位职责范本
2014/07/02 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang
Python如何加载模型并查看网络
2022/07/15 Python