In many native iOS applications, webviews are used to perform certain tasks. Once the initial urls is set to webview, it becomes difficult to intercept redirection url(if any), which is handled by webview. But sometimes we need to intercept these urls to perform specific actions.
Most common example is while making payments through apps. Many redirections happen while doing such payments. After the redirection, we need to return to the app. To detect status of payment, we need to detect certain url or domain and prevent webview to load further.
To perform such task, iOS has provided
UIWebViewDelegate protocol, the methods of which can be used to detect loading request.
With use of
UIWebViewDelegate protocol, it becomes really easy to intercept such redirections by webview. We just need to adopt
UIWebViewDelegate protocol in our
To detect which url is currently being loaded, below are UIWebViewDelegate methods.
- Before url starts loading
With this webview delegate method we can detect which url is going to load and can prevent loading by just
return false such as in above method add following check
With this we can block certain domain or url in webview or perform the required action.
- After url has been loaded
We can perform required action after the particulat url has been loaded.
Thus, in above mentioned example of payments through app, we can detect final redirection url of app website and return to app by simply closing webview by
self.dismissViewControllerAnimated(true, completion: nil).
Note: We can’t detect the url in
webViewDidStartLoad method of
UIWebViewDelegate as the request property of the webview isn’t assigned until the request has been loaded.