随着混合开发的流行,在 iOS 开发中,web 容器已经成为任何一款中型及以上规模 App 必备的模块,甚至一些小型 App 中你也或发现不可或缺。除了常规展示 web 页面之外,统一 web 页面风格、统一 web 页面调用原生代码的能力等也是目前比较通用的做法。这篇文章就介绍一下,用最简单的方式,搭建一款 App 中不可或缺的 web 容器框架。
WebView
既然要承载 web 页面,一个原生的 WebView 必不可少。在 iOS 中,目前已经有两款高性能、功能齐全的 web 浏览器,UIWebView (>=2.0)和 WKWebView(>=7.0)。
当然,两种 web 浏览器选其一即可。网上有很多文章,包括我之前已经发表的博文中,都介绍过这两种浏览器,读者可以根据自己的需要选择。
就目前的情况看,UIWebView 发展了很多年,目前市面上大部分的 web 页面也都支持这样的浏览器,因此很多公司在选择的时候都使用这个,但是,我们知道,WKWebView 有太多改善前者的优点,而且也是苹果官方提倡大家使用的,为了性能,为了更多的特性,建议初次搭建的朋友采用 WKWebView。
Bridge
为了实现 h5 与 native 之间的互相调用,我们需要在两者之间架一层桥来实现,关于 bridge,之前的文章也有介绍。
bridge 的功能包括:native 调用 h5,h5 回调 native,h5 调用 native,native 回调 h5。
有了 bridge,h5可以使用 native 支持的更多特性,native 可以获取 h5 页面加载的信息,也可以让 web 页面动态执行一些脚本做一些事。
总之,在 web 容器框架中,这个 bridge 还是很有必要的。
资源缓存
嗯,这个是辅助项,做了这一步可以进一步提高 web 容器的加载性能,而且资源缓存到本地后可以做到不依赖网络,提高用户体验。
通常有两种做法,
- 一次性下载并缓存所有资源
- 按需下载并缓存资源。
对于 UIWebView 而言,可以充分利用 NSURLProtocol。进行资源请求的拦截处理实现预下载和本地资源加载。
UIWebView + WebViewJavascriptBridge + NJKWebViewProgress
UIWebView 使用简单,而且现在用户的手机性能也已经不再是页面展示性能的瓶颈,所以,这里介绍的依然采用 UIWebView 作为 web 浏览器。
WebViewJavascriptBridge 是一款非常强大的第三方开源 bridge 库,同时支持 UIWebView 和 WKWebView。
git 地址
NJKWebViewProgress 是一款能使 UIWebview 显示加载进度的第三方开源框架,支持代理协议处理和 progressview 展示两种功能。
git 地址
网友评论