I use WKWebView to load my webpage. When user click a button in webpage, my webpage will open a custom schema URL (e.g. asfle://download?media_id=1). And I use KVO to observe WKWebView's URL property to get the URL. It works well in iOS 9, but it doesn't work in iOS 10. I can't get the url. I use Xcode 8, swift 2.3.
override func viewDidLoad() {
super.viewDidLoad()
webView.addObserver(self, forKeyPath: "URL", options: .New, context: nil)
}
override func observeValueForKeyPath(keyPath: String?,
ofObject object: AnyObject?,
change: [String : AnyObject]?,
context: UnsafeMutablePointer<Void>)
{
print("url:\(webView.URL)")
}
In iOS 9, it can print url. But in iOS 10 only the website's url get printed, when user touch the button in webpage, nothing get printed.
I found the solution. Instead of using KVO, use delegate to detect opening URL.
You can still observe
WKWebView
'surl
property, just be sure to hold a strong reference to the returned observation:Also, don't forget to capture
self
asweak
in observation closure if you plan to use it there, as otherwise you will get a retain cycle.I found the optional solution.I have get same problem and change this line