在我们的应用程序中,在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;