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 相关文章推荐
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 Javascript
jquery submit ie6下失效的原因分析及解决方法
Nov 15 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
Nov 19 Javascript
JS修改iframe页面背景颜色的方法
Apr 01 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
Aug 03 Javascript
浅析jQuery Ajax通用js封装
Jun 22 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
JavaScript之Date_动力节点Java学院整理
Jun 28 Javascript
前端常见跨域解决方案(全)
Sep 19 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
了解JavaScript中let语句
May 30 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
js的表单操作 简单计算器
2011/12/29 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
python基础教程之循环介绍
2014/08/29 Python
python生成圆形图片的方法
2020/03/25 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
python sort、sort_index方法代码实例
2019/03/28 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
python 将Excel转Word的示例
2021/03/02 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
校园环保标语
2014/06/13 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL