123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- //
- // BaseJSWebViewController.swift
- // RainbowPlanet
- //
- // Created by 南鑫林 on 2019/6/20.
- // Copyright © 2019 RainbowPlanet. All rights reserved.
- //
- import UIKit
- import WebKit
- import WebViewJavascriptBridge
- class BaseJSWebViewController: BaseViewController {
-
- deinit {
- removeWebView()
- }
- //加载普通URL
- var URLString : String?
- //加载本地URL
- var HTMLName : String?
- //保存请求链接
- var snapShotsArray:Array<Any>?
-
- override func viewDidLoad() {
- super.viewDidLoad()
- setupViews()
- setupData()
- }
-
- override func setupViews() {
- removeWKWebViewCookies()
- view.addSubview(wkWebView)
- view.addSubview(progressView)
- WebViewJavascriptBridge.enableLogging()
- }
-
- override func setupLayouts() {
-
- }
-
- override func setupData() {
- //// 加载普通URL
- if (URLString != nil) {
- webloadType(.URLString(url: URLString!))
- }
-
- // 加载本地URL
- if (HTMLName != nil ) {
- webloadType(.HTMLName(name: HTMLName!))
- }
-
- }
-
- lazy var bridge: WebViewJavascriptBridge = {
- let bridge = WebViewJavascriptBridge(forWebView: self.wkWebView)
- bridge?.setWebViewDelegate(self)
- return bridge!
- }()
-
- lazy var wkWebView: WKWebView = {
- /// 创建webveiew
- let wkWebView = WKWebView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenHeight-48-kNavBarTotalHeight-kTabBarTotalHeight))
- // 监听支持KVO的属性
- wkWebView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
- return wkWebView
- }()
-
- /// 进度条
- lazy var progressView: UIProgressView = {
- let progressView = UIProgressView(progressViewStyle: .default)
- progressView.frame = CGRect(x: CGFloat(0.0), y:0, width: CGFloat(wkWebView.width), height: 3)
- progressView.trackTintColor = UIColor.clear
- progressView.progressTintColor = kThemeColor
- return progressView
- }()
-
- /// 加载webView
- func webloadType(_ loadType:WKWebLoadType) {
- switch loadType {
- case .URLString(let urltring):
- let urlstr = URL(string: urltring)
- let request = URLRequest(url: urlstr!)
- wkWebView.load(request)
- case .HTMLName(let string):
- loadHost(string: string)
- default:
- break
- }
- }
-
-
- /// 加载本得html
- ///
- /// - Parameter string: <#string description#>
- func loadHost(string:String) {
- let path = Bundle.main.path(forResource: string, ofType: "html")
- // 获得html内容
- do {
- let html = try String(contentsOfFile: path!, encoding: String.Encoding.utf8)
- // 加载js
- wkWebView.loadHTMLString(html, baseURL: Bundle.main.bundleURL)
- } catch { }
- }
-
- /// 刷新
- public func reload() {
- wkWebView.reload()
- }
-
- /// 后退
- public func goBack() {
- wkWebView.goBack()
- }
-
- /// 前进
- public func goForward() {
- wkWebView.goForward()
- }
-
- /// 遗传webView
- public func removeWebView(){
- wkWebView.removeObserver(self, forKeyPath: "estimatedProgress")
- wkWebView.navigationDelegate = nil
- wkWebView.uiDelegate = nil
- self.view.removeFromSuperview()
- }
-
- //请求链接处理
- func pushCurrentSnapshotView(_ request: NSURLRequest) -> Void {
- // 连接是否为空
- guard let urlStr = snapShotsArray?.last else { return }
- // 转换成URL
- let url = URL(string: urlStr as! String)
- // 转换成NSURLRequest
- let lastRequest = NSURLRequest(url: url!)
- // 如果url是很奇怪的就不push
- if request.url?.absoluteString == "about:blank"{ return }
- // 如果url一样就不进行push
- if (lastRequest.url?.absoluteString == request.url?.absoluteString) {return}
- // snapshotView
- let currentSnapShotView = wkWebView.snapshotView(afterScreenUpdates: true);
- //向数组添加字典
- snapShotsArray = [["request":request,"snapShotView":currentSnapShotView]]
- }
-
- open override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
- if keyPath == "estimatedProgress"{
- // 设置进度条透明度
- progressView.alpha = CGFloat(1.0 - wkWebView.estimatedProgress)
- // 给进度条添加进度和动画
- progressView.setProgress(Float(wkWebView.estimatedProgress), animated: true)
- // 结束进度
- if Float(wkWebView.estimatedProgress) >= 1.0{
- progressView.alpha = 0.0
- progressView .setProgress(0.0, animated: false)
- }
- }else {
- super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
-
- }
- }
- }
|