2017-08-10 210 views
4

如何在使用WKWebView時捕獲重定向url,就像網頁在提交用戶名和密碼或其他數據時重定向到另一頁一樣。我需要捕獲重定向的網址。 WKNavigationDelegate中是否有任何方法可以覆蓋?在ios中捕獲wkwebview中的重定向url

+0

喜昨天你的問題得到解決或者沒有 –

+0

了使用wkwebview –

+0

好解決,但你不告訴我 –

回答

4

使用此方法WKNavigationDelegate

public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void) 
    { 
     if(navigationAction.navigationType == .formSubmitted) 
     { 
      if navigationAction.request.url != nil 
      { 
       //do what you need with url 
       //self.delegate?.openURL(url: navigationAction.request.url!) 
      } 
      decisionHandler(.cancel) 
      return 
     } 
     decisionHandler(.allow) 
    } 

希望這有助於

0

使用web視圖:shouldStartLoadWithRequest:navigationType:委託方法。

重定向屬於UIWebViewNavigationTypeOther。

+0

剛一說明:web視圖:shouldStartLoadWithRequest:navigationType:方法是UIWebViewDelegate的一部分,而問題是關於WKWebView –

4

(這回答瞭如何檢測WKWebView一個URL重定向,這是導致我這個頁面的搜索稍微更具普遍性的問題。)

簡短的回答

使用WKNavigationDelegatewebView(_:didReceiveServerRedirectForProvisionalNavigation:)功能和檢查WKWebViewURL財產。

再回應

有一對夫婦的地方,你可以檢測到服務器端重定向。

在iOS 10.3.3和iOS 11.0,事件在裝入被服務器重定向的URL時,我觀察到的順序是:

  1. WKNavigationDelegate功能 webView(_:decidePolicyFor:decisionHandler:)被稱爲該 原始URL請求。 WKWebViewURL屬性設置爲 原始URL。

  2. WKNavigationDelegate函數webView(_:didStartProvisionalNavigation:)被調用爲 原始URL請求。 WKWebViewURL屬性設置爲 原始URL。

  3. WKWebViewURL屬性由WebKit更新爲重定向URL。 (你只知道這個,如果你是鍵值 觀察屬性。)

  4. WKNavigationDelegate功能webView(_:decidePolicyFor:decisionHandler:)被稱爲該 重定向的URL請求。 WKWebViewURL屬性然後是 重定向URL。

  5. WKNavigationDelegate函數webView(_:didReceiveServerRedirectForProvisionalNavigation:)是 調用。 WKWebViewURL屬性是 重定向URL。

(注:在iOS的11。3和4逆轉,與URL性質不變,webView(_:decidePolicyFor:decisionHandler:),這實際上似乎是一個合理的排序,但我還沒有看到這樣的設備上0模擬器我所看到的步驟。)

這似乎是webView(_:didReceiveServerRedirectForProvisionalNavigation:)建明確地爲了檢測重定向的目的,所以可能是首選的選項,儘管重定向可能在步驟3或4中被推斷出來,但是隻有當你能確定沒有其他導航改變的原因時。