**import** UIKit
**import** QuickLook
**class** LZPDFWebController: UIViewController {
**public** **var** webUrl: String?
**lazy** **var** wkWebView: WKWebView = {
**let** webView = WKWebView(frame: **self**.view.bounds)
webView.navigationDelegate = **self******
**return** webView
}()
**private** **lazy** **var** progressView: UIProgressView = {
**let** progressV = UIProgressView(frame: CGRect(x: 0, y: kNavigationHeight, width: kScreenWidth, height: 2))
progressV.backgroundColor = UIColor.lightText
progressV.isHidden = **true******
**return** progressV
}()
**override** **init**(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
**super**.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
**self**.setup()
}
**required** **init**?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
**deinit** {
**self**.removeObserve()
}
**override** **func** viewDidLoad() {
**super**.viewDidLoad()
**self**.reloadUrl(**self**.webUrl)
**self**.bbm_addSubviews()
**self**.addObserve()
}
**public** **func** reloadUrl(_ url: String?) {
print("--- pure webController = url ",url)
**guard** **let** urlStr = url,
**let** uRL = URL(string: urlStr) **else** {
**return******
}
**let** urlRequest = URLRequest(url: uRL)
**self**.wkWebView.load(urlRequest)
}
**override** **func** observeValue(forKeyPath keyPath: String?, of object: **Any**?, change: [NSKeyValueChangeKey: **Any**]?, context: UnsafeMutableRawPointer?) {
**if** keyPath == "estimatedProgress" {
**let** progress = **self**.wkWebView.estimatedProgress
print("------ progress = ",progress)
**self**.progressView.progress = Float(**self**.wkWebView.estimatedProgress)
**if** **self**.progressView.progress == 1 {
**self**.progressView.isHidden = **true******
}
}**else** **if** keyPath == "title"{
**self**.navigationBar.title = **self**.wkWebView.title
} **else** {
**super**.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
}
**private** **func** setup() {
**self**.openType = .push
}
**private** **func** addObserve(){
**self**.wkWebView.addObserver(**self**, forKeyPath: "estimatedProgress", options: .new, context: **nil**)
**self**.wkWebView.addObserver(**self**, forKeyPath: "title", options: .new, context: **nil**)
}
**private** **func** removeObserve() {
**self**.wkWebView.removeObserver(**self**, forKeyPath: "estimatedProgress")
**self**.wkWebView.removeObserver(**self**, forKeyPath: "title")
}
}
**extension** BBPDFWebController: WKNavigationDelegate {
**func** webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print("---- 开始加载网页")
**self**.progressView.isHidden = **false******
}
**func** webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("---- 加载完成")
**self**.progressView.isHidden = **true******
}
**func** webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: **any** Error) {
print("---- 加载失败")
**self**.progressView.isHidden = **true******
}
**func** webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction) **async** -> WKNavigationActionPolicy {
**return** .allow
}
**func** webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse) **async** -> WKNavigationResponsePolicy {
**guard** **let** uRL = navigationResponse.response.url,
**let** webUrl = **self**.webUrl **else** {
**return** .allow
}
**let** data: Data? = **try**? Data(contentsOf: uRL)
**guard** **let** data = data ,
**let** webURL = URL(string: webUrl) **else** {
**return** .allow
}
**self**.wkWebView.load(data, mimeType: "application/pdf", characterEncodingName: "UTF-8", baseURL: webURL)
**return** .allow
}
}