Hybrid混合开发知识点(一)
Hybrid是半Native半Web开发模式,充分利用H5的跨平台、快速迭代能力以及Native的流畅性、系统API调用能力,具有可复用性高、开发成本低、跨平台开发的特点。
在阐述Hybrid混合开发知识点之前,我们先梳理下WebView加载H5页面及H5与Android的交互等方面的知识点。
WebViewClient类 :处理各种通知&请求事件。常用方法如下:
WebChromeClient类 :辅助webview处理javaScript对话框,加载进度,网站图标,网站标题等。
WebSettings常用属性:
WebView常用API调用:
WebView需要设置setJavaScriptEnabled(true);使WebView支持执行JavaScript脚本。
以上两种Android调用H5方法,均在onPageFinished()方法回调后执行,即页面加载完毕后。
js通过脚本映射addJavascriptInterface()中的Object对象,实现H5调用Android方法。前提须设置settings.setJavaScriptEnabled(true)。
Android中的Scheme是一种页面跳转协议,常处理以下场景交互:
在使用Scheme前,须在AndroidManifest.xml中对Activity添加< intent-filter/>过滤器注册。
常规的URL Scheme格式为:[scheme]://[host]/[path]?[query],如 app://book:8888/bookDetail?bookId=10011002
App内页面跳转,示例1:
通过debug模式,可获得从Scheme中解析出的参数值,如下:
H5页面跳转App页面,示例2:
若要跳转AndroidManifest.xml中定义Scheme的Activity,H5端配置如下:
在App内点击该WebView页面链接会触发WebViewClient#shouldOverrideUrlLoading()方法,解析如下:
如上所示,和常规的URL Scheme解析同理,注意shouldOverrideUrlLoading()的版本兼容。
重定向问题的处理方案 :WebView的getHitTestResult()的函数可以获取点击页面元素的类型,若获取的HitTestResult为null或UNKNOWN_TYPE,则认定为重定向URL,对此情况直接return false。
shouldOverrideUrlLoading()处理H5与Android交互的存在的问题:
硬编码问题虽然借鉴了ARouter路由跳转思想能缓解页面跳转,但是在交互方面addJavascriptInterface映射对象的方案更优。