Веб-просмотр iOS и Android: как закрыть веб-просмотр и вернуться в приложение?

Я занимаюсь разработкой веб-страницы, которая будет вызываться iOS и Android- приложением с использованием веб-просмотра.

  1. Эта веб-страница будет предлагать пользователю форму
  2. Пользователь должен заполнить поля и отправить форму
  3. После отправки формы я перенаправляю пользователя на другой URL
  4. Когда этот последний 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 устарел!):

  1. Слушайте навигационные события через WKNavigationDelegate

    webView.navigationDelegate = myNavigationDelegate // или используйте self при реализации его в вашем собственном WebView ViewController

  2. Прослушайте определенный триггерный 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)
        }
    }
    
  3. Закрыть 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;
        }
    }
}
Другие вопросы по тегам