Reputation: 156
I am developing a webpage which will be called by an iOS and an Android App using a webview.
Is it possible to to this within the webpage or is it something to be managed by the app which open the webview? And how could it be possible?
I read something about UIWebViewDelegate but I'm not sure if it could be the right solution.
Thank you
Upvotes: 4
Views: 4871
Reputation: 2240
Solution with new WKWebView (UIWebView is deprecated!):
Listen to navigation events via WKNavigationDelegate
webView.navigationDelegate = myNavigationDelegate // or use self when implementing it in your own WebView ViewController
Listen to certain trigger URL in this delegate
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print("request: (navigationAction.request.description)")
if navigationAction.request.description.hasSuffix("/yourFinishUrlEnding") {
print("url matches...")
decisionHandler(.allow)
closeWebview()
} else {
decisionHandler(.allow)
}
}
Close WebView (should works in all presentation variants)
Add this to your assigned WKNavigationDelegate:
func closeWebview() {
if(controller.presentingViewController != nil && (nil == controller.navigationController || controller.navigationController?.viewControllers.count < 2 )){
controller.dismiss(animated: true, completion: completion)
}else{
controller.navigationController?.delegate = nil;
// self.animationInteractor.forceCompleteAnimation(.Left)
let c = controller.navigationController?.viewControllers.count
let ct = c! - 2;
controller.navigationController?.popViewController(animated: true)
if controller.navigationController?.viewControllers[ct] is UITransitionViewController {
controller.navigationController?.transitioningDelegate = controller.navigationController?.viewControllers[ct] as! UITransitionViewController;
}
}
}
Upvotes: 0
Reputation: 302
Use a hash in your final URL like http://domain.com/thanks.html#closeWebview then watch URL.
On Android :
mWebview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (url.endsWith("#closeWebview")){
mWebview.setVisibility(View.GONE);
}
}
});
Upvotes: 5
Reputation: 2049
You can use UIWebViewDelegate
methods to track if the page has been loaded and perform any operation:
-(void)webViewDidFinishLoad:(UIWebView *)webView
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
-(void)webViewDidStartLoad:(UIWebView *)webView
For eg: you could use didFinish like:
-(void)webViewDidFinishLoad:(UIWebView *)webView{
if(finalURLReached)
[self dismissViewControllerAnimated:YES completion:nil];
}
Upvotes: 2