APP中嵌入h5,如何通过window.WebViewJavascriptBridge进行交互

uniapp H5嵌套通讯方案-webview&iframe uniapp H5嵌套通讯方案-webview&iframe,解决app嵌套H5页面问题 webview适配性好,对于个个设备使用友好方便app的H5调试书写逻辑较为繁琐需要引入外部js包会占满整个屏幕,需要手动设置边距iframe使用起来书写逻辑方便可以自适应父级dom大小父亲H5本地调试不友好,会报跨域问题对设备兼容性不高。 阅读详情

本文主要是涉及这样一个需求,公司的移动端项目比较多,但是不想安装过多的APP,于是所有项目以H5的形式开发,最后嵌入进APP的壳子中,继而只需要安装一个app; 那么这里边存在一个问题,h5与原生app如何进行交互呢?
原生app跳转进相应的H5界面,需要携带一些用户信息,本文主要是通过window.WebViewJavascriptBridge悄悄的进行数据交互。

本文主要站在h5的角度进行讲解:

第一步: 创建一个bridge.js文件,编写如下公共代码:

/* eslint-disable */
// 根据navigator.userAgent判断一下当前环境属于ios环境还是按住哦环境
let isAndroid =
  navigator.userAgent.indexOf("Android") > -1 ||
  navigator.userAgent.indexOf("Adr") > -1;
let isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);

/** 针对安卓和ios系统,对window.WebViewJavascriptBridge进行兼容性处理 */
//这是必须要写的,用来创建一些设置
function setupWebViewJavascriptBridge(callback) {
  //Android使用
  if (isAndroid) {
    if (window.WebViewJavascriptBridge) {
      callback(WebViewJavascriptBridge);
    } else {
      //添加dom事件
      document.addEventListener(
        "WebViewJavascriptBridgeReady",
        function() {
          callback(WebViewJavascriptBridge);
        },
        false
      );
    }
    sessionStorage.phoneType = "android";
  }

  //iOS使用
  if (isiOS) {
    if (window.WebViewJavascriptBridge) {
      return callback(WebViewJavascriptBridge);
    }
    if (window.WVJBCallbacks) {
      return window.WVJBCallbacks.push(callback);
    }
    window.WVJBCallbacks = [callback];
    var WVJBIframe = document.createElement("iframe");
    WVJBIframe.style.display = "none";
    WVJBIframe.src = "wvjbscheme://__BRIDGE_LOADED__";
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(function() {
      document.documentElement.removeChild(WVJBIframe);
    }, 0);
    sessionStorage.phoneType = "ios";
  }
}
//注册回调函数,第一次连接时调用 初始化函数(android需要初始化,ios不用)
setupWebViewJavascriptBridge(function(bridge) {
  if (isAndroid) {
    //初始化
    bridge.init(function(message, responseCallback) {
      var data = {
        "Javascript Responds": "Wee!"
      };
      responseCallback(data);
    });
  }
});

export default {
  // js调APP方法 (参数分别为:app提供的方法名  传给app的数据  回调)
  callHandler(name, data, callback) {
    setupWebViewJavascriptBridge(function(bridge) {
      bridge.callHandler(name, data, callback);
    });
  },
  // APP调js方法 (参数分别为:js提供的方法名  回调)
  registerHandler(name, callback) {
    setupWebViewJavascriptBridge(function(bridge) {
      bridge.registerHandler(name, function(data, responseCallback) {
        callback(data, responseCallback);
      });
    });
  }
};

第二步: 全局注册bridge
在main.js中

import Bridge from '@/utils/bridge'
Vue.prototype.$bridge = Bridge

第三步: 去相应h5项目中的界面中开始交互

// 设置用信息

this.$bridge.callHandler("sendUserInfo", JSON.stringify(temp), () => {})

// 获取用户信息

this.$bridge.callHandler("getUserInfo","", res =>{
          const temp = JSON.parse(res)
     }
})

// 切换系统的方法(多个h5项目在原生app的壳子中进行切换)

changeSys(){
      var temp={
        flag:'1',
        system:'MTS'
      }
      this.$bridge.callHandler("changeSys",JSON.stringify(temp),()=>{})
    },

在这里插入图片描述

原生app与H5进行交互 原生App与H5交互 阅读详情

相关推荐

uniapp支付宝小程序内嵌webview通信uniapp H5项目的解决方案

我们在uniapp小程序中内嵌了web-view的一个h5的页面,当点击h5中某个按钮的时候,需要传递参数数据在小程序中接收到,下面是实现方法。在测试的时候我们可以关闭支付宝对于webview和域名的校验,这样只需要跑一下内置的服务就可以了。所以我们在h5项目文件中新建一个html页面,并且在manifest.json中的web配置中应用该html。只需要在路径中拼接参数,在h5中onload生命周期钩子中就可以拿到了。因为uni官方文档对于webview通信的应用是在原生h5中进行的。

shmily的博客 5225

WebView与JavaScriptBridge的基本使用方式

WebView的常用方法和JS桥的基本使用方式,以及一个简单的demo示例

MIILN的博客 5321

H5嵌入APP后,通过window.WebViewJavascriptBridge原生APP与H5之间交互

原生APP跳转到H5页面时,往往需要携带一些用户信息,之前做法是在跳转的地址中拼接H5页面需要的参数,现在通过window.WebViewJavascriptBridge悄悄的进行数据交互。 本文主要从H5的角度记录交互思路: 1:安卓环境和ios环境稍微有点不同,需要根据navigator.userAgent判断一下当前环境 2:仍然是APP环境不同,安卓需要进行兼容性判断,如果不存在wi...

haoyanyu_的博客 1万+

webview原理和JSBridge

webview是一个嵌入式的浏览器,我们平常使用频率最高的就是客户端内嵌的webview 特点:运行在webview中的JS代码有能力调用原生的系统API,没有传统浏览器沙箱的限制。 目前javascript和客户端(后面统称native)交互的常见方式有两种 JSBridge schema JSBridge 当我们在native内打开m页,native会在全局的window下,为我们注入一个Bridge。这个Bridge里面,会包含我们与native交互的各种方法、比如判断第三方App是否安装、获取网

分享前端开发工程师的一些日常生活、前端知识点、职业发展、对一些问题的看法、感悟等等 8952

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

H5与原生app交互,需要WebViewJavascriptBridge,废话不多直接上代码,下面是项目中的封装bridge.js的全部代码(示例代码为vue) //iOS 交互声明 function connectWebViewJavascriptBridgeIOS(callback) { if (window.WebViewJavascriptBridge) { return ca...

weixin_44696379的博客 1万+

LMK04821时钟芯片SPI配置避坑指南:从寄存器读写到频率校准全流程

本文详细解析了LMK04821时钟芯片的SPI配置全流程,涵盖寄存器读写、频率校准及JESD204B系统设计中的关键技巧。通过实战案例和避坑指南,帮助工程师高效解决时钟输出异常、同步失败等常见问题,提升高速数据采集系统的时钟稳定性。

weixin_29172963的博客 159

android 监听 h5 window,H5嵌入APP后,通过window.WebViewJavascriptBridge原生APP与H5之间交互...

下面从H5的角度记录交互思路:1:安卓环境和ios环境稍微有点不同,需要根据navigator.userAgent判断一下当前环境2:仍然是APP环境不同,安卓需要进行兼容性判断,如果不存在window.WebViewJavascriptBridge变量,需要手动添加Dom的WebViewJavascriptBridgeReady事件监听;ios同样需要判断是否存在window.WebViewJ...

weixin_28809701的博客 1630

RT-Thread stm32h7使用串口DMA

stm32h7在rtthread中无法使用串口DMA,通过更改驱动代码使其支持串口DMA

qq_35141454的博客 2286

H5嵌入APP后,保存图片至相册(window.WebViewJavascriptBridge原生APP与H5之间交互)

H5嵌入APP

MYuanFang的博客 2899

高分思路!挑战7天完成一篇网状meta DAY1-7

PASSION!继续析挑战,7天完成一篇网状meta分!

MR_SCI_help的博客 786

如何利用三阈值游程理论识别干旱事件_python

如果当前时间点与上一个干旱事件的结束位置相隔不超过一个月(`index - current_event['end_index']

weixin_44259522的博客 1945

WebViewJavascriptBridge H5交互

作为一个low逼公司的前端,什么app的都是奢侈,但是呢,保不齐要对接一些有逼格的公司业务,所以呢,也算是在所谓hibrid模式下,找到了一丝生存的希望 大致情况是这样,需要在对接方的app中嵌入一些我方的h5页面。这套业务流程大体总结如下 首先约定好,app首次跳转过来是的方式,比如url外加一个token,然后h5页面拿到这个token再去通过接口校验身份的合法性。这中间呢,还可以加上相互...

front end workhorse zuo 1512

逆向工程实战:解密AppleAccount的X-MMe-Nas-Qualify签名生成机制

本文通过逆向工程实战,详细解析了AppleAccount服务中X-MMe-Nas-Qualify签名的生成机制。作者利用Frida进行动态追踪定位签名源头,结合IDA Pro进行静态分析,并借助LLDB动态调试还原核心算法。文章最终分享了如何独立于苹果官方库,通过Python代码复现签名算法,为自动化测试和深度交互苹果服务的开发者提供了关键技术路径。

weixin_29323049的博客 707

实现:H5与原生APP(Android或Ios)相互交互。

第1步:在utils目录下新建bridge.js文件。 // bridge.js: 用于实现H5跟Ios交互的工具。 export const setupWebViewJavascriptBridge = (callback) => { if ((window).WebViewJavascriptBridge) { return callback((window).WebViewJavascriptBridge) } if ((window).WVJBCallbacks) {

qq_38969618的博客 1972

单卡调试OpenGait:从分布式到本地的轻量级改造指南

本文为个人开发者和研究者提供了一份详细的OpenGait框架单卡调试指南。针对该框架默认依赖多GPU分布式训练的问题,文章通过分析核心痛点,逐步讲解了如何从环境搭建、绕过分布式初始化陷阱、处理通信后端报错到最终配置与调试,实现从分布式到本地的轻量级改造,帮助读者在单张GPU上高效进行步态识别模型的验证与学习。

weixin_28223453的博客 139

华为OD机试 - 小扇和小船的数字游戏 - 二进制(Python/JS/C/C++ 2024 C卷 200分)

二进制表示:任何数 n 的二进制表示中,要找到下一个有相同数量的1的数,我们需要在最低位的0后面的最低位的1进行操作。右侧交换法则:找到右侧的第一个0,位于第一个1的左边,将这个0变成1(提升这个位),并将这个1变成0(下移这个位)。调整尾部1:为了得到最小的数,将所有低于已交换的1的位重置,使得所有1尽可能靠右。

学Java,找哪吒 1162

JS与iOS&Android的交互 WebViewJavascriptBridge

需求: 在原生App里打开webview, 嵌入H5. 在H5中点击某个元素, 触发与native app交互, 又跳回到app中. 同理, 在app中完成某项操作后, 获得某个参数, 根据这个状态刷新页面. 框架: Vue. JavaScript原生的写法已经调通了, 并且与native端的已经联调通过. 所以这里是把它们迁移到Vue框架的写法. 这里要区分iOS系统和Android系统. iO...

weixin_34375233的博客 331

CATIA二次开发一一一计算 CATIA 零件模型在全局坐标系下的包围盒方法

本文介绍了一种在CATIA中计算零件模型全局坐标系下包围盒(BoundingBox)的方法。通过遍历零件几何体特征点,并应用坐标变换矩阵,最终返回精确的零件包围盒。核心步骤包括初始化与输入校验、坐标变换处理、几何体特征点遍历以及全局坐标变换。关键方法涉及CATMathBox操作和坐标变换接口。该方法适用于碰撞检测、可视化优化和装配分析等场景,能够快速判断零件间的空间干涉,提升渲染性能,并计算零件在装配体中的全局位置范围。

工业软件开发 894

【webview】原生 App 与 H5 双向通信完全指南:JSBridge 原理与实战

本文系统介绍了Hybrid App中H5与原生双向通信的完整解决方案。通过分析Android和iOS底层通信原理(对象注入与消息通道),设计了一套跨平台JSBridge封装,统一调用接口并支持Promise异步处理。文章提供了双平台原生实现代码(Kotlin/Swift)和通用JSBridge模块(bridge.js),包含自动环境检测、回调管理、内存优化等核心功能。实战示例展示了同步/异步调用方式,并总结了生产环境中的常见问题与规避方案。该方案有效屏蔽平台差异,简化业务层开发,可直接应用于实际项目。

G.E.M.千百度的博客 452

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Vue中封装WebViewJavascriptBridge实现与app原生交互

原生app里边一些需要页面需要h5来实现,涉及到app原生与h5交互,记录一下。

CaseyWei 3701

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WebViewJavascriptBridge

Web 页面中的 JS 与 iOS Native 如何交互?JS 和 iOS Native 就好比两块没有交集的大陆,如果想要使它们相互通信就必须要建立一座“桥梁”是盛名已久的 JSBridge 库,它仅使用了少量代码就实现了对于 Mac OS X 的 WebView 以及 iOS 平台的 UIWebView 和 WKWebView 三种组件的完美支持。WebViewJavascriptBridge 主要是作为 Mac OS X 和 iOS 端(Native 端)与 JS 端相互通信,互相调用的桥梁。

2301_76965813的博客 1765

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WebViewJavascriptBridge详细使用

前言 WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互。如果需要支持到iOS6之前的app,使用它是很不错的。本篇讲讲WebViewJavascriptBridge的基本原理及详细讲讲如何去使用,包括iOS端的使用和JS端的使用。 经过多番百度、Google,发现WebViewJavascriptBridge的资...

weixin_30345055的博客 901

WebViewJavascriptBridge 常见问题解决方案

WebViewJavascriptBridge 是一个用于在 iOS 和 OSX 平台上实现 Objective-C 和 JavaScript 之间消息传递的桥梁。该项目的主要编程语言是 Objective-C 和 JavaScript。它支持在 UIWebView、WKWebView 和 WebView 中进行双向通信,广泛应用于需要在原生应用和 Web 视图之间进行交互的场景。 ## 新手使...

gitblog_00356的博客 1447

通过window.WebViewJavascriptBridgeH5和原生APP之间交互。

通过window.WebViewJavascriptBridgeH5和原生APP之间交互。

~~~ 690
上一篇: vuex的基本用法(提炼公共文件import all vuex modules)
下一篇: Vue3尝鲜之Suspense异步组件(踩坑)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值