Веб-просмотр iOS и Android: как закрыть веб-просмотр и вернуться в приложение?
Я занимаюсь разработкой веб-страницы, которая будет вызываться iOS и Android- приложением с использованием веб-просмотра.
- Эта веб-страница будет предлагать пользователю форму
- Пользователь должен заполнить поля и отправить форму
- После отправки формы я перенаправляю пользователя на другой URL
- Когда этот последний URL загружен, мне нужно закрыть веб-просмотр
Возможно ли это сделать на веб-странице или этим должно управлять приложение, открывающее веб-просмотр? И как это могло быть возможно?
Я читал кое-что о UIWebViewDelegate, но я не уверен, что это может быть правильным решением.
Спасибо
3 ответа
Используйте хэш в своем окончательном URL-адресе, например http://domain.com/thanks.html затем просмотрите URL-адрес.
На 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);
}
}
});
Ты можешь использовать UIWebViewDelegate
методы для отслеживания загрузки страницы и выполнения каких-либо операций:
-(void)webViewDidFinishLoad:(UIWebView *)webView
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
-(void)webViewDidStartLoad:(UIWebView *)webView
Например: вы можете использовать didFinish как:
-(void)webViewDidFinishLoad:(UIWebView *)webView{
if(finalURLReached)
[self dismissViewControllerAnimated:YES completion:nil];
}
Решение с новым WKWebView (UIWebView устарел!):
Слушайте навигационные события через WKNavigationDelegate
webView.navigationDelegate = myNavigationDelegate // или используйте self при реализации его в вашем собственном WebView ViewController
Прослушайте определенный триггерный URL в этом делегате
func webView(_ webView: WKWebView, managePolicyFor navigationAction: WKNavigationAction, SolutionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print ("request: (navigationAction.request.description)")
if navigationAction.request.description.hasSuffix("/yourFinishUrlEnding") { print("url matches...") decisionHandler(.allow) closeWebview() } else { decisionHandler(.allow) } }
Закрыть WebView (должно работать во всех вариантах презентации)
Добавьте это к назначенному 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;
}
}
}