簡體   English   中英

iOS和Android webview:如何關閉webview並返回App?

[英]iOS and Android webview: how to close webview and go back to App?

我正在開發一個網頁,它將由iOSAndroid應用程序使用webview調用。

  1. 該網頁將向用戶提示表單
  2. 用戶必須填寫字段並提交表單
  3. 提交表單后,我將用戶重定向到另一個URL
  4. 加載此最終URL后,我需要關閉webview

是否可以在網頁內進行此操作,還是由打開webview的應用程序管理? 怎么可能呢?

我讀了一些關於UIWebViewDelegate但我不確定它是否是正確的解決方案。

謝謝

在最終的網址中使用哈希,例如http://domain.com/thanks.html#closeWebview,然后觀看網址。

在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 //或在您自己的WebView ViewController中實現它時使用self

  2. 收聽此委托中的某個觸發器URL

    func webView(_ webView:WKWebView,decisionPolicyFor 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) } } 
  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;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM