2016-11-02 7 views
1

Я использую WKWebView для загрузки моей веб-страницы. Когда пользователь нажимает кнопку на веб-странице, моя веб-страница откроет собственный URL-адрес схемы (например, asfle: // download? Media_id = 1). И Я использую KVO для просмотра свойства URL WKWebView для получения URL-адреса. Он хорошо работает в iOS 9, но он не работает в iOS 10. Я не могу получить URL. Я использую Xcode 8, swift 2.3.с использованием KVO для наблюдения за свойством URL-адреса WKWebView не работает в iOS 10

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)") 
    } 

В iOS 9, он может печатать URL. Но в iOS 10 только URL-адрес веб-сайта печатается, когда пользователь прикасается к кнопке на веб-странице, ничего не печатается.

ответ

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) 
    } 
1

Я нашел дополнительный solution.I есть получить такую ​​же проблему и изменить эту строку

 webview.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options:.new, context: nil) 
2

Вы все еще можете наблюдать WKWebView «s 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 в weak в закрытии наблюдения, если вы планируете использовать это там, так как в противном случае вы получите цикл удержания.

 Смежные вопросы

  • Нет связанных вопросов^_^