如何在移动Android/iOS(本机应用程序)中关闭WebView



在我们的应用程序中,在WebView中打开一个URL,在某些特定URL检测到后,可以关闭WebView。如何关闭WebView?我在JavaScript中尝试了window.close()。但无法使用Android或ios App。

根据问题的评论,我为关闭Web视图的更好术语 - 返回到上一个屏幕。您可以按以下方式执行此操作:

Android:

finish()  

ios:

如果您使用的是导航控制器:

self.navigationController?.popViewController(animated: true)  

如果您要介绍Web View Controller:

self.dismiss(animated: true, completion: nil)  

关键是检查Web视图的委托功能中的URL。

Android:

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.equals("your_url")) {
            finish()
            return false;
        } else {
            return true;
        }
    }  

ios:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if request.url?.absoluteString == "your_url" {
            self.navigationController?.popViewController(animated: true)
            // If controller is presented -  self.dismiss(animated: true, completion: nil)  
            return false
        }
        return true
    }

您可以使用 shouldOverrideUrlLoading

当将新URL加载到当前WebView中时,让主机应用程序有机会接管控件。如果未提供WebViewClient,默认情况下,WebView将要求Activity Manager选择适合URL的处理程序。如果提供了WebViewClient,则返回true表示主机应用程序处理URL,而返回false表示当前的WebView处理URL。

注意:

  • 使用POST"方法"来调用此方法。
  • 此方法也被称为具有非HTTP方案的子框架,因此,它非常厌恶地无条件地使用该请求的URL从该方法内部进行loadUrl(String),然后返回true,因为这将使WebView尝试加载非HTTPURL,因此失败。

这是示例演示

public class MainActivity extends AppCompatActivity {
    WebView myWebView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myWebView = findViewById(R.id.myWebView);
        myWebView.setWebViewClient(new MyWebViewClient());
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.loadUrl("https://stackoverflow.com/users/7666442/nilesh-rathod?tab=topactivity");
    }

    public class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.equals("https://stackoverflow.com/users/7666442/nilesh-rathod?tab=profile")) {
                finish() ;
                Toast.makeText(MainActivity.this, "URL DETECTED", Toast.LENGTH_SHORT).show();
                // perform your action here
                return true;
            } else {
                view.loadUrl(url);
                return true;
            }
        }
    }

}

在iOS中,您现在将使用Safari sfview,因此直接拾取URL被阻止为安全性,因此您可以在Android和iOS应用程序中唯一可以应用的通用解决方案。P>

使用Deep Link到达该特定URL时,您可以触发以关闭Safari SF视图。

Google Deep链接并按照示例。

使用此功能可以帮助您

  myWebView.destroy();
  myWebView = null;