Capture redirect url in wkwebview in ios

后端 未结 5 1331
孤独总比滥情好
孤独总比滥情好 2020-12-09 02:09

How do I capture the redirection url in when using WKWebView like if a webpage redirects to another page on submitting the username and password or some other data. I need t

5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-09 02:49

    (This answers the slightly more general question of how to detect a URL redirection in WKWebView, which is the search that lead me to this page.)

    Short answer

    Use WKNavigationDelegate's webView(_:didReceiveServerRedirectForProvisionalNavigation:) function and examine WKWebView's URL property.

    Longer answer

    There are a couple of places you could detect a server-side redirect.

    On iOS 10.3.3 and iOS 11.0, the sequence of events I observe when loading a URL that gets redirected by the server is:

    1. The WKNavigationDelegate function webView(_:decidePolicyFor:decisionHandler:) is called for the original URL request. WKWebView's URL property is set to the original URL.

    2. The WKNavigationDelegate function webView(_:didStartProvisionalNavigation:) is called for the original URL request. WKWebView's URL property is set to the original URL.

    3. The WKWebView's URL property is updated by WebKit to the redirection URL. (You'll only know about this if you are key-value observing the property.)

    4. The WKNavigationDelegate function webView(_:decidePolicyFor:decisionHandler:) is called for the redirected URL request. WKWebView's URL property is then redirection URL.

    5. The WKNavigationDelegate function webView(_:didReceiveServerRedirectForProvisionalNavigation:) is called. WKWebView's URL property is the redirection URL.

    (Note: On the iOS 11.0 simulator I have seen steps 3 and 4 reversed, with the URL property unchanged in webView(_:decidePolicyFor:decisionHandler:), which actually seems like a sensible ordering, but I haven't observed this on a device.)

    It seems like the webView(_:didReceiveServerRedirectForProvisionalNavigation:) is built explicitly for the purpose of detecting redirects so is probably the preferred option, although the redirect could be possibly be inferred at steps 3 or 4 but only if you can be sure that there are no other causes of navigational change.

提交回复
热议问题