2017-08-10 209 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中被推断出来,但是只有当你能确定没有其他导航改变的原因时。