美文网首页
HybridAPP基础|WKWebView加载及跳转监听

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

作者: 溪石iOS | 来源:发表于2019-01-29 23:04 被阅读116次

    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加载及跳转监听

          本文链接:https://www.haomeiwen.com/subject/cumfsqtx.html