背景
随着Web技术的发展和移动互联网的发展,Hybrid技术已经成为一种前端开发的主流技术方案。那什么是Hybrid App呢?
Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具" Native App良好用户交互体验的优势 "和" Web App跨平台开发的优势 "。
总的来说,就是既具有APP的体验和性能,又具有Web灵活的开发模式和跨平台开发能力。
现有的技术方案
1、H5 + JSBridge,通过JSBridge完成H5和Native的通信,赋予H5一定的端能力。是一种基于WebView UI的解决方案。
2、React-Native,进一步通过JSbridge将js解析为虚拟DOM传递到Native,并使用原生进行渲染。
3、小程序解决方案,采用双线程的渲染机制,将渲染层WebView和逻辑层JavaScriptCore形成独立的模块,通过Native进行通信(setData),逻辑层的网络请求也会由Native进行转发。在UI方面,采用的是WebView和原生相结合的方式。
技术原理
本文将从jsbridge的原理、实现、双向通信、接入方式和H5的嵌入方式进行详细阐述。
jsbridge的原理
客户端能对WebView中请求进行拦截,都有相应的API:
Android:
// Android: shouldoverrideurlloading public boolean shouldOverrideUrlLoading(WebView view, String url){ //读取到url后自行进行分析处理 //如果返回false,则WebView处理链接url,如果返回true,代表WebView根据程序来执行url return true; }
IOS:
// IOS: shouldStartLoadWithRequest - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; NSString *requestString = [[request URL] absoluteString]; //获取url scheme后自行进行处理
因此,在页面中可以通过iframe加载src的方式触发相应的捕获函数,在捕获函数中可以对url中的参数进行解析;此外,Android还可以通过重写OnJSPrompt方法,对调用Prompt进行拦截,同样能实现通信的目的。
示例:
调起ios端:
function iosInvoke(scheme) { var elem = document.createElement('iframe'); var body = document.body || document.getElementsByTagName('body')[0]; elem.style.display = 'none'; elem.src = scheme; body.appendChild(elem); setTimeout(function () { body.removeChild(elem); elem = null; }, 0); }
调起android端:
function androidInvoke(scheme) { var androidJsBridge = window.Bdbox_android_jsbridge; if (androidJsBridge && androidJsBridge.dispatch) { androidJsBridge.dispatch(scheme); } else { var re = window.prompt('BdboxApp:' + JSON.stringify({ obj: 'Bdbox_android_jsbridge', func: 'dispatch', args: [scheme] })); return re; } }
协议制定URL Scheme
URL Scheme是什么
由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。
每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。
设置URL Scheme
xxxapp://communication"color: #ff0000">如何进行双向通信
双向通信主要是H5和Native的双向通信过程以及参数传递、回调执行。
H5通知Native:
H5通知Native的方式主要有:
- 调用prompt/console/alert,调用时进行参数传递,端进行拦截重写
- URL Scheme跳转拦截,将参数放在请求URL上
- API挂载,通过Navtive获取js执行环境,将相应的api挂载在js上,供h5调用
Native通知H5:
回调机制,在向Native传递信息时,将回调函数也传递,Native在调用完成后,使用js执行环境执行回调函数
接入方式
jsbridge的接入,端方面的jsbridge和h5方面的jsbridge
嵌入方式
h5的嵌入方式:
- 直接代码,直接将H5代码css、html、js放入端目录下,以file协议的方式访问,优点是访问快速,缺点是迭代不方便。
- 线上地址,以http协议访问,使用webview打开url形式,相较于代码嵌入的方式来说,速度比较慢,依赖网络传输速度;优点是迭代快速
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
hybrid,app,技术
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
- 黄乙玲1988-无稳定的爱心肝乱糟糟[日本东芝1M版][WAV+CUE]
- 群星《我们的歌第六季 第3期》[320K/MP3][70.68MB]
- 群星《我们的歌第六季 第3期》[FLAC/分轨][369.48MB]
- 群星《燃!沙排少女 影视原声带》[320K/MP3][175.61MB]
- 乱斗海盗瞎6胜卡组推荐一览 深暗领域乱斗海盗瞎卡组分享
- 炉石传说乱斗6胜卡组分享一览 深暗领域乱斗6胜卡组代码推荐
- 炉石传说乱斗本周卡组合集 乱斗模式卡组最新推荐
- 佟妍.2015-七窍玲珑心【万马旦】【WAV+CUE】
- 叶振棠陈晓慧.1986-龙的心·俘虏你(2006复黑限量版)【永恒】【WAV+CUE】
- 陈慧琳.1998-爱我不爱(国)【福茂】【WAV+CUE】
- 咪咕快游豪礼放送,百元京东卡、海量欢乐豆就在咪咕咪粉节!
- 双11百吋大屏焕新“热”,海信AI画质电视成最大赢家
- 海信电视E8N Ultra:真正的百吋,不止是大!
- 曾庆瑜1990-曾庆瑜历年精选[派森][WAV+CUE]
- 叶玉卿1999-深情之选[飞图][WAV+CUE]