You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
4.0 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. //
  2. // WkWebViewController.swift
  3. // GME Remit
  4. //
  5. // Created by Mac on 12/25/18.
  6. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import WebKit
  10. class WkWebViewController: UIViewController {
  11. var webView: WKWebView!
  12. var url: String?
  13. var headers: [KftcHeader]?
  14. var activityIndicator: UIActivityIndicatorView?
  15. let userContentController = WKUserContentController()
  16. override func viewDidLoad() {
  17. super.viewDidLoad()
  18. let preference = WKPreferences()
  19. preference.javaScriptEnabled = true
  20. let webConfiguration = WKWebViewConfiguration()
  21. // test 1
  22. userContentController.add(self, name: "test")
  23. // test 2
  24. webConfiguration.userContentController = userContentController
  25. webConfiguration.preferences = preference
  26. let webView = WKWebView.init(frame: self.view.frame, configuration: webConfiguration)
  27. webView.uiDelegate = self
  28. webView.navigationDelegate = self
  29. self.view = webView
  30. self.webView = webView
  31. // other setup
  32. addCloseButton()
  33. self.activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
  34. self.webView.addSubview(activityIndicator!)
  35. self.webView.isUserInteractionEnabled = true
  36. self.activityIndicator?.startAnimating()
  37. self.activityIndicator?.isHidden = false
  38. self.activityIndicator?.hidesWhenStopped = true
  39. self.webView.bringSubview(toFront: activityIndicator!)
  40. let headers = self.headers ?? []
  41. let _url = (self.url ?? "")
  42. print(_url)
  43. if let myURL = URL(string: _url) {
  44. var myRequest = URLRequest(url: myURL)
  45. //
  46. // headers.forEach({
  47. // myRequest.setValue($0.key ?? "", forHTTPHeaderField: $0.value ?? "")
  48. //
  49. // })
  50. //
  51. // print(myRequest.allHTTPHeaderFields)
  52. webView.load(myRequest)
  53. }
  54. }
  55. private func addCloseButton() {
  56. let button = UIBarButtonItem.init(title: "Close", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self._dismiss))
  57. self.navigationItem.rightBarButtonItem = button
  58. }
  59. @objc private func _dismiss() {
  60. self.dismiss(animated: true, completion: nil)
  61. }
  62. }
  63. extension WkWebViewController: WKUIDelegate, WKNavigationDelegate {
  64. func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
  65. print("start")
  66. activityIndicator?.center = self.view.center
  67. // activityIndicator?.isHidden = false
  68. activityIndicator?.startAnimating()
  69. }
  70. func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
  71. // activityIndicator?.isHidden = true
  72. activityIndicator?.stopAnimating()
  73. self.navigationItem.title = webView.title
  74. }
  75. func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
  76. let alertController = UIAlertController(title: message, message: nil,
  77. preferredStyle: UIAlertController.Style.alert);
  78. alertController.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.cancel) {
  79. _ in completionHandler()}
  80. );
  81. self.present(alertController, animated: true, completion: {});
  82. }
  83. }
  84. extension WkWebViewController: WKScriptMessageHandler {
  85. func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
  86. print(message.name)
  87. if let body = message.body as? String {
  88. self.alert(message: body, title: nil) {
  89. self.dismiss(animated: true, completion: nil)
  90. }
  91. }
  92. }
  93. }