I want to get the url of a tapped link in WKWebView
. The links are in a custom format that will trigger certain actions in the app. e.g. http://my-site/help#deeplink-intercom
. I am using KVO
like so:
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.navigationDelegate = self
webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
view = webView
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let newValue = change?[.newKey] {
print("url changed: \(newValue)")
}
print("Did tap!!")
}
This works great when the link is tapped on the first time. However if I tap the same link twice in a row it won't report the link tap (obviously because the actual value hasn't changed). Is there a workaround to fix this so I can detect every tap and get the link? Any pointer on this would be great! Thanks!
Change
addObserver
like thisIn
observeValue
function you able get both valueYou can use WKWebView delegate method. And don't forget to set the webview delegate to self:
webview.navigationDelegate = self
Swift 5.0
Remember to set navigationDelegate on the WKWebView instance.