// // InAppWebViewStatic.swift // flutter_inappwebview // // Created by Lorenzo Pichilli on 08/12/2019. // import Foundation import WebKit import FlutterMacOS public class InAppWebViewStatic: ChannelDelegate { static let METHOD_CHANNEL_NAME = "com.pichillilorenzo/flutter_inappwebview_static" var plugin: InAppWebViewFlutterPlugin? var webViewForUserAgent: WKWebView? var defaultUserAgent: String? init(plugin: InAppWebViewFlutterPlugin) { super.init(channel: FlutterMethodChannel(name: InAppWebViewStatic.METHOD_CHANNEL_NAME, binaryMessenger: plugin.registrar!.messenger)) self.plugin = plugin } public override func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { let arguments = call.arguments as? NSDictionary switch call.method { case "getDefaultUserAgent": getDefaultUserAgent(completionHandler: { (value) in result(value) }) break case "handlesURLScheme": let urlScheme = arguments!["urlScheme"] as! String if #available(macOS 10.13, *) { result(WKWebView.handlesURLScheme(urlScheme)) } else { result(false) } break default: result(FlutterMethodNotImplemented) break } } public func getDefaultUserAgent(completionHandler: @escaping (_ value: String?) -> Void) { if defaultUserAgent == nil { webViewForUserAgent = WKWebView() webViewForUserAgent?.evaluateJavaScript("navigator.userAgent") { (value, error) in if error != nil { print("Error occured to get userAgent") self.webViewForUserAgent = nil completionHandler(nil) return } if let unwrappedUserAgent = value as? String { self.defaultUserAgent = unwrappedUserAgent completionHandler(self.defaultUserAgent) } else { print("Failed to get userAgent") } self.webViewForUserAgent = nil } } else { completionHandler(defaultUserAgent) } } public override func dispose() { super.dispose() plugin = nil webViewForUserAgent = nil defaultUserAgent = nil } deinit { dispose() } }