Han*_*gbo 3 webkit ios wkwebview ios10 swift2.3
我使用WKWebView加载网页。当用户单击网页中的按钮时,我的网页将打开一个自定义架构URL(例如asfle:// download?media_id = 1)。我使用KVO观察WKWebView的URL属性以获取URL。它在iOS 9中很好用,但在iOS 10中不起作用。我无法获取URL。我使用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)")
}
Run Code Online (Sandbox Code Playgroud)
在iOS 9中,它可以打印网址。但是在iOS 10中,仅打印网站的url,当用户触摸网页中的按钮时,不会打印任何内容。
您仍然可以观察WKWebView的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")")
})
}
}
Run Code Online (Sandbox Code Playgroud)
另外,不要忘了拍摄self的weak观察闭合,如果你打算在那里使用它,否则你会得到一个保留周期。
我找到了解决方案。不使用 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)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2668 次 |
| 最近记录: |