HybridAPP基础|WKWebView加载及跳转监听

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禁止访问

你可能感兴趣的:(HybridAPP基础|WKWebView加载及跳转监听)