H5与原生app交互,需要WebViewJavascriptBridge,废话不多直接上代码,下面是项目中的封装bridge.js的全部代码(示例代码为vue)

//iOS 交互声明
function connectWebViewJavascriptBridgeIOS(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 = 'wvjbscheme://__BRIDGE_LOADED__'document.documentElement.appendChild(WVJBIframe)setTimeout(() => {document.documentElement.removeChild(WVJBIframe)}, 0)
}//Android 交互声明
function connectWebViewJavascriptBridgeANDROID(callback) {if (window.WebViewJavascriptBridge) {callback(WebViewJavascriptBridge);} else {document.addEventListener("WebViewJavascriptBridgeReady",function () {callback(WebViewJavascriptBridge);},false);}
}export default {//H5调用Nativecallhandler(name, data, callback) {//iOS的方法if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {connectWebViewJavascriptBridgeIOS(function (bridge) {bridge.callHandler(name, data, callback)})}//Android方法if (/(Android)/i.test(navigator.userAgent)) {connectWebViewJavascriptBridgeANDROID(function (bridge) {bridge.callHandler(name, data, callback)})}},//Native调用H5registerhandler(name, callback) {//iOS的方法if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {connectWebViewJavascriptBridgeIOS(function (bridge) {bridge.registerHandler(name, function (data, responseCallback) {callback(data, responseCallback)})})}//Android方法if (/(Android)/i.test(navigator.userAgent)) {connectWebViewJavascriptBridgeANDROID(function (bridge) {bridge.init(function (message, responseCallback) {if (responseCallback) {// responseCallback(data);}});bridge.registerHandler(name, function (data, responseCallback) {callback(data, responseCallback)})})}},}

然后挂载到vue的原型方法上,在main.js中进行如下配置

import Bridge from "@/config/bridge.js" //此路径根据实际bridge.js路径填写
Vue.prototype.$bridge = Bridge

完事儿,下面看一下在实际使用中的用法

methods: {// h5调用原生方法,testWebViewBridge为原生app定义的方法名。action为h5传递给原生app的参数,可以为多个。data为原生app传递给h5参数goNative() {const vm = this;this.$bridge.callhandler("testWebViewBridge",{ action: "pick me" },data => {vm.ddd = data;// 处理返回数据});},// h5注册方法,供app调用iosToH5(){},},mounted() {// 原生app调用h5方法,iosToH5是methods中定义的方法名。const vm = this;this.$bridge.registerhandler("iosToH5", (data, responseCallback) => {// data是原生app传递给h5的参数vm.native_data = data;});}

混合开发中,H5页面与原生app交互(方法互相调用与传参)相关推荐

  1. 随笔集:H5如何对接原生app的方法

    H5如何对接原生app的方法 原生APP内部嵌入H5页面的场景对于web前端来说可能并不陌生,既然是嵌入在APP内部肯定也少不了会涉及到APP和H5的一些交互.比如传参.H5调用APP方法.APP调用 ...

  2. 混合开发与移动端--H5混合开发、H5页面的开发布局、开发注意事项、H5与原生(安卓)交互、webpack打包优化解决方案、H5调试工具、webview

    H5混合开发 混合开发.原生开发.H5开发的区别: 简述:主流APP:原生APP.H5(webapp).混合APP,相对应的定制研发即原生开发.H5开发.混合开发 原生APP开发优缺点: 可以访问手机 ...

  3. h5页面和原生app页面的区别

    "原生应用"占统治地位 当我们为移动设备开发应用程序时,程序员通常都会选择开发"原生应用","原生应用"是一种用户必须通过手机应用商店购买下 ...

  4. iOS和android h5字体差异,关于移动hybrid开发中H5页面的字体应与系统保持一致的问题...

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 0.问题来源 在移动hybrid开发,也就是说,部分页面会使用html+css+javascript技术来制作,例如个人 ...

  5. 移动端h5页面与原生app的交互

    在js与原生进行交互的时候对js来说,大部分逻辑都是回调与监听,调用原生的方法 JSBridge是Native代码与JS代码的通信桥梁,因此项目中要设计jsbridge.js: (1)设计出一个Nat ...

  6. H5页面获取原生APP的登录状态

    使用场景 安卓和IOS客户端在做一些节日.拉新等临时活动时需要内嵌一个HTML5页面(活动相关的逻辑都在该页面上),在开发HTML5页面的角度,则需要APP端提供用户的登录状态(包括token/用户I ...

  7. 混合开发中,H5页面如何监听Android手机返回键

    1. 前言 混合开发中,如果当前操作的页面是H5写的.那么这个时候点击Android手机返回键,默认是返回到上一个页面,跟浏览器的回退功能是一样的,都是返回到历史记录中的前一个记录.看着好像没啥问题, ...

  8. 陪玩系统源码开发,H5页面中调用支付功能的实现

    最近在陪玩系统源码开发工作中,有个H5页面需要实现微信支付和支付宝支付的功能,现在已经完成,抽个时间写出来,分享给有需要的人. 第一步:先判断当前环境 判断陪玩系统源码中用户所属环境,根据环境不同,执 ...

  9. H5页面与原生页面的区别

    一.定义 1.H5,即是html5,超文本标记语言,用于描述网页内容结构的语言,网页编程中由它有负责描述页面数据和信息 2.JS,即是JavaScript,广泛用于web应用开发中的脚本语言,负责响应 ...

最新文章

  1. 高昆仑大数定律 中心极限定理
  2. 干货 | 斯坦福的人工智能4年路线!
  3. 第10章 指针(五) 使用地址-------指针的引用
  4. Kendall Rank(肯德尔等级)相关系数
  5. Orace 11g 监听 配置修改 说明
  6. 面试问:Kafka为什么速度那么快?
  7. 零基础逆向工程28_Win32_02_事件_消息_消息处理函数
  8. idea进行断点快捷键
  9. Scrapy爬虫抓取ZOL手机详情
  10. Oracle查看分区、索引、表占用空间大小
  11. 三局两胜还是五局三胜?
  12. itextword加公章 java_新手如何使用itext7生成pdf盖章
  13. unity怪物攻击玩家减血_Unity-塔防游戏之怪物波次简单算法
  14. Oracle的Numer类型与C,C#数据类型对应关系
  15. 手把手教你如何写一个三子棋/N子棋的小游戏
  16. Laya页面嵌套和Scene.destory导致的Bug
  17. 2021-06-27微信公众号模板消息群发
  18. java 根据excel模板格式导出指定格式的excel
  19. linux:ping不通www.baidu.com
  20. ESP32-Arduino开发实例-与Arduino之间SPI通信

热门文章

  1. 运动耳机什么牌子好、这五款是最值得推荐的运动耳机
  2. linux bam文件格式介绍,Sam和bam文件说明
  3. SQLServer The datediff function resulted in an overflow
  4. 暗斑怎么形成的_脸上长暗斑详解
  5. 怎么还原计算机网络,怎么把网络协议还原为默认设置
  6. android广播教程,Android学习笔记(广播机制)
  7. jvm(17)垃圾回收器
  8. C语言实现画爱心(两种方式画法)
  9. 阿里云国际站:云端实时渲染 阿里云用算力让三星堆“活过来”
  10. 〖金融帝国实验室〗(Capitalism Lab)深度研究文章——《浅析CapLab中的通货膨胀与城市GDP》(上)(作者:jiuliumuliao) ​​​​