我使用WKWebView加载我的网页。当用户单击网页中的按钮时,我的网页将打开自定义架构URL(例如:asfle:// download?media_id = 1)。和 我使用KVO来观察WKWebView的URL属性以获取URL。它在iOS 9中运行良好,但它在iOS 10中不起作用。我无法获取网址。我使用Xcode 8,swift 2.3。
doubleMe = 2
在iOS 9中,它可以打印网址。但是在iOS 10中,只有网站的网址被打印出来,当用户触摸网页上的按钮时,没有任何内容被打印出来。
答案 0 :(得分:3)
您仍然可以观察WKWebView
的{{1}}属性,只需确保对返回的观察结果有强烈的参考:
url
此外,如果您打算在观察结束时使用它,请不要忘记将class ViewController: UIViewController {
var webView: WKWebView!
var urlObservation: NSKeyValueObservation?
override func viewDidLoad() {
super.viewDidLoad()
// ...Initialize web view.
webView = WKWebView(frame: view.bounds, configuration: WKWebViewConfiguration())
webView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
view.addSubview(webView)
// Add observation.
urlObservation = webView.observe(\.url, changeHandler: { (webView, change) in
NSLog("Web view URL changed to \(webView.url?.absoluteString ?? "Empty")")
})
}
}
捕获为self
,否则您将获得保留周期。
答案 1 :(得分:2)
我找到了解决方案。而不是使用KVO,使用委托来检测开放URL。
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
}
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
print("url:\(navigationAction.request.URL)")
decisionHandler(.Allow)
}
答案 2 :(得分:1)
我找到了可选的解决方案。我遇到了同样的问题,并改变了这一行
webview.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options:.new, context: nil)