我注意到,随着Google System WebView的上次更新,我的WebView中的所有链接都在视图中打开.但根据谷歌的文档:
public boolean shouldOverrideUrlLoading(WebView视图,String url)在API级别1中添加
当新Web将要加载到当前WebView中时,为主机应用程序提供接管控件的机会.如果未提供WebViewClient,则默认情况下WebView将要求活动管理器为URL选择正确的处理程序.如果提供了WebViewClient,则返回true表示主机应用程序处理url,而return false表示当前WebView处理url.对于使用POST"方法"的请求,不调用此方法.
我没有提供自定义WebViewClient.
注意:我注意到问题的设备是HTC One,其中包含2015年6月8日起的最新Google System WebView
我可以重现这些发现.Android系统WebView 43.0.2357.121展示了您描述的行为,而我升级到它之前的版本没有.
我已就此提交了一份错误报告,现在需要进行更多测试并警告全世界.
感谢您指出了这一点!
UPDATE
我目前的建议是:
总是附上
WebViewClient你的WebView始终贯彻
shouldOverrideUrlLoading()在WebViewClient始终返回
true以表明您正在处理该事件始终执行您的应用需要完成的任务,无论是将URL加载到URL中
WebView还是在URL上启动浏览器(而不是返回false并依赖于股票行为)像这样的静态内部类似乎可以做到这一点 - 创建一个实例并将其传递给
setWebViewClient()你的WebView:
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
}
}
Run Code Online (Sandbox Code Playgroud)
(您可以将业务逻辑放在哪里
shouldKeepInWebView()以确定给定的URL是否应该保留在WebView或启动浏览器)
| 归档时间: |
|
| 查看次数: |
883 次 |
| 最近记录: |