我可以重现这些发现 . Android系统WebView 43.0.2357.121展示了您描述的行为,而我升级到它之前的版本没有 .
感谢您指出了这一点!
UPDATE
我目前的建议是:始终将WebViewClient附加到WebView始终在WebViewClient上实现shouldOverrideUrlLoading()始终返回true表示您正在处理事件始终执行您的应用程序需要完成的操作,无论是否正在加载URL进入WebView或在URL上启动浏览器(而不是返回false并依赖于股票行为)像这样的静态内部类似乎可以做到这一点 - 创建一个实例并将其传递给WebView上的setWebViewClient():
private static class URLHandler extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (shouldKeepInWebView(url)) {
view.loadUrl(url);
}
else {
Intent i=new Intent(Intent.ACTION_VIEW, Uri.parse(url))
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
view.getContext().startActivity(i);
}
return(true);
}
private boolean shouldKeepInWebView(String url) {
return(true); // or false, or use regex, or whatever
}
}
(您可以将业务逻辑放在shouldKeepInWebView()中,以确定给定的URL是否应保留在WebView中或启动浏览器)