web与APP之间的交互---WebViewJavascriptBridge
在实际项目之中,经常会遇到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相关推荐
- JS与OC的交互 WebViewJavaScriptBridge WEB微信支付
JS与OC的交互 WebViewJavaScriptBridge WEB微信支付: Markdown及扩展 网上找了挺多的,自己给自己总结了一下(仅供小白参考,大牛就放过我吧)说白了就是混合开发H5+ ...
- Mui --- app与服务器之间的交互原理、mui ajax使用
1.APP与服务器之间的交互原理app端(客户端)与服务端的交互其实理解起来和容易,客户端想服务器端发送请求,服务器端进行数据运算后返回最终结果.结果可以是多种格式: 1.text 文本格式 2.xm ...
- web与服务器之间的信息交互,web客户端与服务器端如何进行交互
web客户端与服务器端如何进行交互 内容精选 换一换 开启了 Kerberos认证的安全模式集群,进行应用开发时需要进行安全认证.Kerberos这一名词来源于希腊神话"三个头的狗--地狱之 ...
- android自定义push通知_20个海外Web和App推送通知服务工具
在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处.推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站.它们可以帮助你以指数方式增加流量和参与率.因此,营销人 ...
- .NET Core:通过Web API进行微服务交互
目录 介绍 命名协议 MicroCommerce应用程序结构 MicroCommerce应用开发 1.接口项目,微服务接口和模型类 2. ProductCatalog项目 3. ShoppingCar ...
- java服务端开发安全_后端开发:APP与后端交互的安全性
声明 此文原创,未经允许,禁止转载,可以分享. 最近在做一个项目,是一个APP的后端开发.我需要完成后端框架的建立.数据库设计.后端代码的编写.在这里讲一下APP与后端交互的安全性. 没有AUTH的验 ...
- Web/app端自动化测试对比
Web/app端自动化测试 做了一段时间的Android自动化测试,对比个人之前做的web端自动化测试,有一些感想.(由于个人接触的时间也不是太久,很多东西理解也并不深刻,先写下菜鸟时期的感想.) 区 ...
- 020_Vue非父子组件之间数据交互
1. 非父子组件之间数据交互 1.1. 单独的事件中心管理组件间的通信 var eventHub = new Vue(); 1.2. 监听事件 eventHub.$on('event-name', f ...
- Web 仿 App 动画竟然引出了“性能杀手”
本文作者:杨晔 原创声明:本文为阅文前端团队 YFE 成员出品,请尊重原创,转载请联系公众号 ( id: yuewen_YFE ) 获取授权,并注明作者.出处和链接. 背景 在我参与开发的对话小说项目 ...
最新文章
- generator自动生成mybatis配置和类信息
- 实战SSM_O2O商铺_17【商铺编辑】Dao层开发
- linux加密解密基础、PKI及SSL、创建私有CA
- 正则表达式的常用操作符
- Python键鼠自动化函数
- 超级猫超级签名分发源码
- 如何查找完全二叉树最后一层的最右边的结点
- JZOJ 1039. 【SCOI2009】windy数
- mysql一次运行多个SQL文件
- 存储控制器和SDRAM 实验
- 远程桌面管理工具汇总
- 两台文件服务器共享文件同步,如何实现两台或多台电脑远程修改文件同步更新?...
- scala教程(二) 函数
- 富士通Fujitsu DPK8510E 打印机驱动
- 深度学习模型提升性能的策略
- 幻云蜜网筑迷阵 春秋靶场信安大赛从攻击者角度看安全
- Linux 应用调试神器- ASan
- php mysql可以跨站_Laravel5中防止XSS跨站攻击的方法
- Java客户端开发与服务端开发
- R语言ggplot2优雅的绘制环状云雨图
热门文章
- T100 section已经修改过
- EntityFramework 基础提供程序在 Open 上失败。
- More Effective C++:理解new和delete
- 笑傲江湖霍建华版电子相册
- AOP的研究认识了MVC
- Exchange系列课程之三--群集环境中安装Exchange Server 2003
- 玩转X-CTR100 l STM32F4 l DAC数字模拟转换
- python发送给邮件 转
- “智慧城市”背后的安全隐患
- This Android SDK requires Android Developer Toolkit version 22.6.2 or above.