Javascript iOS和Android webview:如何关闭webview并返回应用程序?

Javascript iOS和Android webview:如何关闭webview并返回应用程序?,javascript,android,ios,webview,uiwebviewdelegate,Javascript,Android,Ios,Webview,Uiwebviewdelegate,我正在开发一个网页,该网页将由iOS和Android应用程序使用网络视图调用 此网页将向用户提示表单 用户必须填写字段并提交表单 提交表单后,我将用户重定向到另一个URL 加载此最终URL时,我需要关闭webview 是否可以在网页中对此进行访问,或者是否需要由打开webview的应用程序进行管理?那怎么可能呢 我读了一些关于UIWebViewDelegate的文章,但我不确定它是否是正确的解决方案 谢谢您可以使用UIWebViewDelegate方法跟踪页面是否已加载并执行任何操作: -(vo

我正在开发一个网页,该网页将由iOSAndroid应用程序使用网络视图调用

  • 此网页将向用户提示表单
  • 用户必须填写字段并提交表单
  • 提交表单后,我将用户重定向到另一个URL
  • 加载此最终URL时,我需要关闭webview
  • 是否可以在网页中对此进行访问,或者是否需要由打开webview的应用程序进行管理?那怎么可能呢

    我读了一些关于UIWebViewDelegate的文章,但我不确定它是否是正确的解决方案


    谢谢

    您可以使用
    UIWebViewDelegate
    方法跟踪页面是否已加载并执行任何操作:

    -(void)webViewDidFinishLoad:(UIWebView *)webView
    -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    -(void)webViewDidStartLoad:(UIWebView *)webView
    
    例如:你可以使用didfish,比如:

    -(void)webViewDidFinishLoad:(UIWebView *)webView{
         if(finalURLReached)
             [self dismissViewControllerAnimated:YES completion:nil];
    }
    

    在您的最终URL中使用散列,如查看URL

    在Android上:

    mWebview.setWebViewClient(新的WebViewClient(){
    @凌驾
    公共void onPageFinished(WebView视图,字符串url){
    super.onPageFinished(视图、url);
    if(url.endsWith(#closeWebview”)){
    mWebview.setVisibility(View.GONE);
    }
    }
    });
    
    使用新的WKWebView的解决方案(不推荐使用UIWebView!):

  • 通过WKNavigationDelegate收听导航事件

    webView.navigationDelegate=myNavigationDelegate//或在自己的webView ViewController中实现它时使用self

  • 在此委托中收听某些触发器URL

    func webView(webView:WKWebView,导航操作的决策策略:WKNavigationAction,决策处理程序:@escaping(WKNavigationActionPolicy)->Void){

    打印(“请求:(navigationAction.request.description)”)

  • 关闭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;
            }
        }
    }
    
    func closeWebview(){
    如果(controller.presentingViewController!=nil&&(nil==controller.navigationController | | controller.navigationController?.viewControllers.count<2)){
    控制器。解除(动画:真,完成:完成)
    }否则{
    controller.navigationController?.delegate=nil;
    //self.animationInteractor.forceCompleteAnimation(.Left)
    设c=controller.navigationController?.viewControllers.count
    设ct=c!-2;
    controller.navigationController?.popViewController(动画:true)
    如果controller.navigationController?.ViewController[ct]是UITransitionViewController{
    controller.navigationController?.TransitionDelegate=controller.navigationController?.ViewController[ct]作为!UITransitionViewController;
    }
    }
    }
    
    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;
            }
        }
    }