Hybrid App简介
Hybrid App(混合模式移动应用)是一种即古老又时髦的开发模式,古老是因为在iPhone开创移动互联网之始,乔布斯就认为“为手机定制的Web页面是移动应用的未来”,为此,他不惜推迟两年才推出原生应用商店,但由于当时Web界面标准H5的混乱情况,Facebook放弃H5转向原生开发,Web APP一度全面被原生开发代替;随着移动互联网不断成熟,产品迭代愈加频繁,Web APP动态分发的优势开始发力,如同混合动力汽车一样,兼具原生性能和Web灵活性的Hybrid APP开始得到用户认可,值得玩味的是,Hybrid APP的评价标准是让用户感觉不到与原生APP的差异
。
WKWebView
Web页面在原生APP中能被正常显示,并与原生交互的关键是WKWebView,
WKWebView是UIWebView的替代品,随iOS 8发布,速度更快,内存占用更少,并提供了更丰富的接口:
- WKUIDelegate:丰富的交互接口,为网页提供原生界面。
- WKNavigationDelegate:提供网页界面导航相关接口。
接下实际演示如何用WKWebView加载baidu,并监听其跳转网页的实现:
加载网页
import UIKit
import WebKit
class MyViewController : UIViewController, WKUIDelegate, WKNavigationDelegate {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
let label = UILabel()
label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
label.text = "Hello World!"
label.textColor = .black
view.addSubview(label)
self.view = view
let webConfiguration = WKWebViewConfiguration()
let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 375, height: 670), configuration: webConfiguration)
webView.uiDelegate = self
webView.navigationDelegate = self
view.addSubview(webView)
let myURL = URL(string:"https://m.baidu.com/")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
{
webView.evaluateJavaScript("navigator.userAgent", completionHandler: { result, error in
if let userAgent = result as? String {
print(userAgent)
}
})
}
}
监听网页中跳转的网址
实现以下代理方法
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print(navigationAction.request.url?.absoluteString ?? "default")
decisionHandler(WKNavigationActionPolicy.allow)
}
navigationAction.request.url
即页面将要跳转的网址,可以加以区分判断,通过WKNavigationActionPolicy控制是否允许跳转:
-
allow
允许访问 -
cancel
禁止访问