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.

130 lines
3.9 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 _url = (self.url ?? "")
  41. print(_url)
  42. if let myURL = URL(string: _url) {
  43. var myRequest = URLRequest(url: myURL)
  44. //
  45. // headers.forEach({
  46. // myRequest.setValue($0.key ?? "", forHTTPHeaderField: $0.value ?? "")
  47. //
  48. // })
  49. //
  50. // print(myRequest.allHTTPHeaderFields)
  51. webView.load(myRequest)
  52. }
  53. }
  54. private func addCloseButton() {
  55. let button = UIBarButtonItem.init(title: "Close", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self._dismiss))
  56. self.navigationItem.rightBarButtonItem = button
  57. }
  58. @objc private func _dismiss() {
  59. self.dismiss(animated: true, completion: nil)
  60. }
  61. }
  62. extension WkWebViewController: WKUIDelegate, WKNavigationDelegate {
  63. func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
  64. print("start")
  65. activityIndicator?.center = self.view.center
  66. // activityIndicator?.isHidden = false
  67. activityIndicator?.startAnimating()
  68. }
  69. func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
  70. // activityIndicator?.isHidden = true
  71. activityIndicator?.stopAnimating()
  72. self.navigationItem.title = webView.title
  73. }
  74. func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
  75. let alertController = UIAlertController(title: message, message: nil,
  76. preferredStyle: UIAlertController.Style.alert);
  77. alertController.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.cancel) {
  78. _ in completionHandler()}
  79. );
  80. self.present(alertController, animated: true, completion: {});
  81. }
  82. }
  83. extension WkWebViewController: WKScriptMessageHandler {
  84. func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
  85. print(message.name)
  86. if let body = message.body as? String {
  87. self.alert(message: body, title: nil) {
  88. self.dismiss(animated: true, completion: nil)
  89. }
  90. }
  91. }
  92. }