如何在移动 android/iOs(本机应用程序)中关闭 webview
Posted
技术标签:
【中文标题】如何在移动 android/iOs(本机应用程序)中关闭 webview【英文标题】:How to close webview in mobile android/iOs(Native app) 【发布时间】:2018-04-26 05:09:24 【问题描述】:在我们的应用中,如果在 webview 中打开一个 url,则可以在检测到某些特定 url 后关闭 webview。
怎么可能关闭 webview ?我在 javascript 中尝试使用 window.close()
。但无法正常工作。从 android 或 ios 应用程序有另一种方式。
【问题讨论】:
您可以简单地设置该网页视图的可见性。 原生还是混合?哪种技术? 原生安卓::wbview.removeAllViews(); wbview.destroy(); 原生应用有问题 关闭网页视图是指从网页视图屏幕导航回上一个屏幕吗? 【参考方案1】:根据 cmets 的问题,我为关闭 Web 视图添加了一个更好的术语 - 返回上一个屏幕。对于 Android 和 iOS,您可以按以下方式执行此操作:
安卓:
finish()
iOS:
如果您使用的是导航控制器:
self.navigationController?.popViewController(animated: true)
如果您正在展示 Web 视图控制器:
self.dismiss(animated: true, completion: nil)
关键是在 web 视图的委托函数中检查该 url。
安卓:
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
【讨论】:
【参考方案2】:您可以使用shouldOverrideUrlLoading
当一个新的 url 即将被加载到当前的
WebView
中时,让宿主应用程序有机会接管控制权。如果未提供WebViewClient
,默认情况下WebView
将要求活动管理器为url 选择正确的处理程序。如果提供了WebViewClient
,则return true 表示主机应用程序处理url,而return false 表示当前WebView
处理url。
注意事项:
使用POST
“方法”的请求不会调用此方法。
此方法也适用于非http方案的子帧,因此强烈不建议在方法内部使用请求的url无条件调用loadUrl(String)
然后返回true,因为这会使WebView
尝试加载非 http url,因此失败。
这里是示例演示
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://***.com/users/7666442/nilesh-rathod?tab=topactivity");
public class MyWebViewClient extends WebViewClient
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
if (url.equals("https://***.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;
【讨论】:
OP在问题cmets中已经提到他想去上一个屏幕。 @Nitish 谢谢我已经更新了我的 BTW 我还添加了评论以按照我的回答中的要求执行他所需的操作,请再次检查 @nilesh 这里需要创建自定义 webview?(根据我的 android 开发人员所说) @BhaveshChauhan 无需创建自定义 webview 只需创建新的自定义WebViewClient
与我的回答相同,它会正常工作【参考方案3】:
在 iOS 中,您现在将使用 Safari sfview,因此出于安全考虑,直接获取 URL 会被阻止,因此您可以在 Android 和 iOS 应用程序中应用的唯一通用解决方案是深度链接。
当您使用深层链接到达该特定 URL 时,您可以触发关闭 safari sf 视图。
Google 深层链接并按照示例进行操作。
【讨论】:
【参考方案4】:使用它可以帮助你
myWebView.destroy();
myWebView = null;
【讨论】:
以上是关于如何在移动 android/iOs(本机应用程序)中关闭 webview的主要内容,如果未能解决你的问题,请参考以下文章
我如何测试我的 xpath 已在 android/iOS 本机应用程序上识别出正确的元素
如何从颤动中正确调用android本机代码(android/IOS)?