H5CommonViewController.swift 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. //
  2. // CommunityMyInvitationViewController.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/6/20.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import WebKit
  10. import SwiftyJSON
  11. import SwiftyMediator
  12. import Kingfisher
  13. class H5CommonViewController: BaseJSWebBaseViewController {
  14. override func didReceiveMemoryWarning() {
  15. super.didReceiveMemoryWarning()
  16. //KingfisherManager.shared.cache.clearDiskCache()
  17. KingfisherManager.shared.cache.clearMemoryCache()
  18. }
  19. deinit {
  20. NXLLog("deinit")
  21. if observe != nil {
  22. NotificationCenter.default.removeObserver(observe!)
  23. }
  24. }
  25. weak var observe : NSObjectProtocol?
  26. override func viewDidLoad() {
  27. super.viewDidLoad()
  28. setupViews()
  29. setupData()
  30. }
  31. //MARK: - view
  32. override func setupViews() {
  33. super.setupViews()
  34. self.wkWebView.navigationDelegate = self
  35. self.wkWebView.scrollView.delegate = self
  36. }
  37. /// 加载数据
  38. override func setupData() {
  39. super.setupData()
  40. WebViewJavascriptBridgeManager.shared.callHandlerH5(bridge: bridge)
  41. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("WVJBRefresh"), object: nil, queue: OperationQueue.main, using: {
  42. [weak self] (notification) in
  43. let refreshModelType = notification.object as? WVJBRefreshModelType
  44. WebViewJavascriptBridgeManager.shared.callHandlerH5Refresh(bridge: self?.bridge, refreshModelType: refreshModelType)
  45. })
  46. WebViewJavascriptBridgeManager.shared.registerHandlerApp(bridge: bridge) {
  47. [weak self] (wvjbModel) in
  48. WebViewJavascriptBridgeManager.shared.jump(wvjbModel: wvjbModel,viewController: self)
  49. }
  50. navigationBar.onClickLeftButton = {
  51. [weak self] in
  52. self?.wkWebView.stopLoading()
  53. if (self?.wkWebView.canGoBack)! {
  54. self?.goBack()
  55. }else {
  56. NotificationCenter.default.post(name: NSNotification.Name("CommunityModulePlanetTop"), object: 1)
  57. self?.navigationController?.popViewController(animated: true)
  58. }
  59. }
  60. }
  61. }
  62. extension H5CommonViewController : UIScrollViewDelegate {
  63. // func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
  64. //
  65. // return false
  66. // }
  67. }
  68. extension H5CommonViewController : WKNavigationDelegate {
  69. //服务器开始请求的时候调用
  70. func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
  71. let navigationURL = navigationAction.request.url?.absoluteString
  72. if let requestURL = navigationURL?.removingPercentEncoding {
  73. //拨打电话
  74. //兼容安卓的服务器写法:<a class = "mobile" href = "tel://电话号码"></a>
  75. //或者:<a class = "mobile" href = "tel:电话号码"></a>
  76. if requestURL.hasPrefix("tel://") {
  77. //取消WKWebView 打电话请求
  78. decisionHandler(.cancel);
  79. //用openURL 这个API打电话
  80. if let mobileURL:URL = URL(string: requestURL) {
  81. if #available(iOS 10, *) {
  82. UIApplication.shared.open(mobileURL, options: [:], completionHandler: nil)
  83. } else {
  84. UIApplication.shared.openURL(mobileURL)
  85. }
  86. }
  87. }
  88. }
  89. switch navigationAction.navigationType {
  90. case WKNavigationType.linkActivated:
  91. pushCurrentSnapshotView(navigationAction.request as NSURLRequest)
  92. break
  93. case WKNavigationType.formSubmitted:
  94. pushCurrentSnapshotView(navigationAction.request as NSURLRequest)
  95. break
  96. case WKNavigationType.backForward:
  97. break
  98. case WKNavigationType.reload:
  99. break
  100. case WKNavigationType.formResubmitted:
  101. break
  102. case WKNavigationType.other:
  103. pushCurrentSnapshotView(navigationAction.request as NSURLRequest)
  104. break
  105. @unknown default:
  106. break
  107. }
  108. decisionHandler(.allow)
  109. }
  110. //开始加载
  111. func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
  112. }
  113. //这个是网页加载完成,导航的变化
  114. func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
  115. }
  116. //跳转失败的时候调用
  117. func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
  118. NXLLog(error)
  119. }
  120. // 内容加载失败时候调用
  121. func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
  122. progressView.isHidden = true
  123. }
  124. // 打开新窗口委托
  125. func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
  126. if navigationAction.targetFrame?.isMainFrame == nil {
  127. webView.load(navigationAction.request)
  128. }
  129. return nil
  130. }
  131. }