在实际项目之中,经常会遇到app之中嵌入网页的情况(Hybrid),就需要web网页与原生app之间交互,比如获取当前用户信息等。一种简单的方式就是通过url参数来搞定,但是这种方式异常死板,所以有了jsbridge。
本文章旨在记录WebViewJavascriptBridge的实现,如有错误,还请指正!如有需要了解jsbridge原理,请google。

需求:

/*** 函数描述:js调用webview事件** jsBridge.callHandler(method, data, callBack(response));* @param method {string} 方法名* @param data {Object} 参数* @return {Object} 回调*//*** 函数描述:webView调用JS事件** jsBridge.registerHandler(method, callBack(response));* @param method {string} 方法名* @return {Object} 回调*/
const JsBridge = {init: function (callback) {const u = navigator.userAgent;const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //判断手机系统if (!isiOS) {  //iosif (window.WebViewJavascriptBridge) {callback(WebViewJavascriptBridge)} else {//    注册事件,WebViewJavascriptBridge加载完成时调用document.addEventListener('WebViewJavascriptBridgeReady',function () {callback(WebViewJavascriptBridge)},false);}} else { //Android//    如果有WebViewJavascriptBridge,则直接返回callbackif (window.WebViewJavascriptBridge) {return callback(WebViewJavascriptBridge);}//    如果有WVJBCallbacks,则向WVJBCallbacks中注入事件if (window.WVJBCallbacks) {return window.WVJBCallbacks.push(callback);}//    否则创建WVJBCallbackswindow.WVJBCallbacks = [callback];const WVJBIframe = document.createElement('iframe');WVJBIframe.style.display = 'none';WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';document.documentElement.appendChild(WVJBIframe);setTimeout(function () {document.documentElement.removeChild(WVJBIframe)}, 0)}},first: function () {const u = navigator.userAgent;const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);if (!isiOS) {const _this = this;_this.init(function (bridge) {bridge.init(function (message, responseCallback) {responseCallback(data);})})}},registerHandler: function (name, fun) {const _this = this;_this.init(function (bridge) {bridge.registerHandler(name, fun);})},callHandler: function (name, data, fun) {const _this = this;_this.init(function (bridge) {bridge.callHandler(name, data, fun);})}
}// 初始化
JsBridge.first();

web与APP之间的交互---WebViewJavascriptBridge相关推荐

  1. JS与OC的交互 WebViewJavaScriptBridge WEB微信支付

    JS与OC的交互 WebViewJavaScriptBridge WEB微信支付: Markdown及扩展 网上找了挺多的,自己给自己总结了一下(仅供小白参考,大牛就放过我吧)说白了就是混合开发H5+ ...

  2. Mui --- app与服务器之间的交互原理、mui ajax使用

    1.APP与服务器之间的交互原理app端(客户端)与服务端的交互其实理解起来和容易,客户端想服务器端发送请求,服务器端进行数据运算后返回最终结果.结果可以是多种格式: 1.text 文本格式 2.xm ...

  3. web与服务器之间的信息交互,web客户端与服务器端如何进行交互

    web客户端与服务器端如何进行交互 内容精选 换一换 开启了 Kerberos认证的安全模式集群,进行应用开发时需要进行安全认证.Kerberos这一名词来源于希腊神话"三个头的狗--地狱之 ...

  4. android自定义push通知_20个海外Web和App推送通知服务工具

    在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处.推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站.它们可以帮助你以指数方式增加流量和参与率.因此,营销人 ...

  5. .NET Core:通过Web API进行微服务交互

    目录 介绍 命名协议 MicroCommerce应用程序结构 MicroCommerce应用开发 1.接口项目,微服务接口和模型类 2. ProductCatalog项目 3. ShoppingCar ...

  6. java服务端开发安全_后端开发:APP与后端交互的安全性

    声明 此文原创,未经允许,禁止转载,可以分享. 最近在做一个项目,是一个APP的后端开发.我需要完成后端框架的建立.数据库设计.后端代码的编写.在这里讲一下APP与后端交互的安全性. 没有AUTH的验 ...

  7. Web/app端自动化测试对比

    Web/app端自动化测试 做了一段时间的Android自动化测试,对比个人之前做的web端自动化测试,有一些感想.(由于个人接触的时间也不是太久,很多东西理解也并不深刻,先写下菜鸟时期的感想.) 区 ...

  8. 020_Vue非父子组件之间数据交互

    1. 非父子组件之间数据交互 1.1. 单独的事件中心管理组件间的通信 var eventHub = new Vue(); 1.2. 监听事件 eventHub.$on('event-name', f ...

  9. Web 仿 App 动画竟然引出了“性能杀手”

    本文作者:杨晔 原创声明:本文为阅文前端团队 YFE 成员出品,请尊重原创,转载请联系公众号 ( id: yuewen_YFE ) 获取授权,并注明作者.出处和链接. 背景 在我参与开发的对话小说项目 ...

最新文章

  1. generator自动生成mybatis配置和类信息
  2. 实战SSM_O2O商铺_17【商铺编辑】Dao层开发
  3. linux加密解密基础、PKI及SSL、创建私有CA
  4. 正则表达式的常用操作符
  5. Python键鼠自动化函数
  6. 超级猫超级签名分发源码
  7. 如何查找完全二叉树最后一层的最右边的结点
  8. JZOJ 1039. 【SCOI2009】windy数
  9. mysql一次运行多个SQL文件
  10. 存储控制器和SDRAM 实验
  11. 远程桌面管理工具汇总
  12. 两台文件服务器共享文件同步,如何实现两台或多台电脑远程修改文件同步更新?...
  13. scala教程(二) 函数
  14. 富士通Fujitsu DPK8510E 打印机驱动
  15. 深度学习模型提升性能的策略
  16. 幻云蜜网筑迷阵 春秋靶场信安大赛从攻击者角度看安全
  17. Linux 应用调试神器- ASan
  18. php mysql可以跨站_Laravel5中防止XSS跨站攻击的方法
  19. Java客户端开发与服务端开发
  20. R语言ggplot2优雅的绘制环状云雨图

热门文章

  1. T100 section已经修改过
  2. EntityFramework 基础提供程序在 Open 上失败。
  3. More Effective C++:理解new和delete
  4. 笑傲江湖霍建华版电子相册
  5. AOP的研究认识了MVC
  6. Exchange系列课程之三--群集环境中安装Exchange Server 2003
  7. 玩转X-CTR100 l STM32F4 l DAC数字模拟转换
  8. python发送给邮件 转
  9. “智慧城市”背后的安全隐患
  10. This Android SDK requires Android Developer Toolkit version 22.6.2 or above.