| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- // LoopFollow
- // NightScoutViewController.swift
- // Created by Jon Fawcett on 2020-06-05.
- import UIKit
- import WebKit
- class NightscoutViewController: UIViewController {
- @IBOutlet var webView: WKWebView!
- override func viewDidLoad() {
- super.viewDidLoad()
- if Storage.shared.forceDarkMode.value {
- overrideUserInterfaceStyle = .dark
- }
- var url = ObservableUserDefaults.shared.url.value
- let token = Storage.shared.token.value
- if token != "" {
- url = url + "?token=" + token
- }
- guard let myUrl = URL(string: url) else { return }
- webView.configuration.preferences.javaScriptEnabled = true
- webView.navigationDelegate = self
- webView.uiDelegate = self
- webView.load(URLRequest(url: myUrl))
- let refreshControl = UIRefreshControl()
- refreshControl.addTarget(self, action: #selector(reloadWebView(_:)), for: .valueChanged)
- webView.scrollView.addSubview(refreshControl)
- webView.uiDelegate = self
- }
- @objc func reloadWebView(_ sender: UIRefreshControl) {
- clearWebCache()
- webView.reload()
- sender.endRefreshing()
- }
- // New code to clear web cache
- func clearWebCache() {
- let dataStore = WKWebsiteDataStore.default()
- let cacheTypes = Set([WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache])
- let date = Date(timeIntervalSince1970: 0)
- dataStore.removeData(ofTypes: cacheTypes, modifiedSince: date) {
- print("Web cache cleared.")
- }
- }
- // this handles target=_blank links by opening them in the same view
- func webView(webView: WKWebView!, createWebViewWithConfiguration _: WKWebViewConfiguration!, forNavigationAction navigationAction: WKNavigationAction!, windowFeatures _: WKWindowFeatures!) -> WKWebView! {
- if let frame = navigationAction.targetFrame,
- frame.isMainFrame
- {
- return nil
- }
- // for _blank target or non-mainFrame target
- webView.load(navigationAction.request)
- return nil
- }
- }
- // MARK: - WKUIDelegate implementation
- extension NightscoutViewController: WKNavigationDelegate, WKUIDelegate {
- func webView(_: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame _: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
- let alertCtrl = UIAlertController(title: nil, message: message, preferredStyle: .alert)
- alertCtrl.addAction(UIAlertAction(title: "OK", style: .default) { _ in
- completionHandler(true)
- })
- alertCtrl.addAction(UIAlertAction(title: "Cancel", style: .cancel) { _ in
- completionHandler(false)
- })
- present(alertCtrl, animated: true)
- }
- func webView(_: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
- guard let _ = navigationAction.request.url else {
- decisionHandler(.cancel)
- return
- }
- decisionHandler(.allow)
- }
- func webView(_: WKWebView, shouldStartLoadWith request: URLRequest) -> Bool {
- guard let url = request.url else {
- return false
- }
- NSLog("Should start: \(url.absoluteString)")
- return true
- }
- func webView(_ webView: WKWebView, createWebViewWith _: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures _: WKWindowFeatures) -> WKWebView? {
- if navigationAction.targetFrame == nil {
- webView.load(navigationAction.request)
- }
- return nil
- }
- }
|