39 lines
991 B
Swift
39 lines
991 B
Swift
import ExpoModulesCore
|
|
import WebKit
|
|
|
|
// This view will be used as a native component. Make sure to inherit from `ExpoView`
|
|
// to apply the proper styling (e.g. border radius and shadows).
|
|
class MyNativeModuleView: ExpoView {
|
|
let webView = WKWebView()
|
|
let onLoad = EventDispatcher()
|
|
var delegate: WebViewDelegate?
|
|
|
|
required init(appContext: AppContext? = nil) {
|
|
super.init(appContext: appContext)
|
|
clipsToBounds = true
|
|
delegate = WebViewDelegate { url in
|
|
self.onLoad(["url": url])
|
|
}
|
|
webView.navigationDelegate = delegate
|
|
addSubview(webView)
|
|
}
|
|
|
|
override func layoutSubviews() {
|
|
webView.frame = bounds
|
|
}
|
|
}
|
|
|
|
class WebViewDelegate: NSObject, WKNavigationDelegate {
|
|
let onUrlChange: (String) -> Void
|
|
|
|
init(onUrlChange: @escaping (String) -> Void) {
|
|
self.onUrlChange = onUrlChange
|
|
}
|
|
|
|
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation) {
|
|
if let url = webView.url {
|
|
onUrlChange(url.absoluteString)
|
|
}
|
|
}
|
|
}
|