Webview重定向和net::ERR_UNKNOWN_URL_SCHEME解析及解决方案

分类: androidios |
转:https://blog.csdn.net/weixin_42602900/article/details/132871142
产生原因
https://img-blog.csdnimg.cn/88e5d0e6134148a79d18b494ab697c6f.png
如何解决
如何解决
https://img-blog.csdnimg.cn/5ce3f7a2c8184d8ba6a226177c3ca283.png
https://img-blog.csdnimg.cn/3b42c77f24344f92bf8c5f6ea044faff.png
下表为上图 HitTestResult 类中变量值所对应打开的网页类型
https://img-blog.csdnimg.cn/25b523d62769409fb515a886fe24e3f7.png
好的,我们接下来看看如何判定加载的url是非 http/https
的自定义协议。很简单,对shouldOverriderUrlLoadin
https://img-blog.csdnimg.cn/30a6feebb13a43ea9c94266521775045.png
解决方案
-
@Override
-
public boolean shouldOverrideUrlLoading
(final WebView view, final String url) { -
-
WebView.HitTestResult hit = view.getHitTestResult(); -
//hit.getExtra()为null或者hit.getType() == 0都表示即将加载的URL会发生重定向,需要做拦截处理 -
if (TextUtils.isEmpty(hit.getExtra()) || hit.getType() == 0) { -
//通过判断开头协议就可解决大部分重定向问题了,有另外的需求可以在此判断下操作 -
Log.e("重定向", "重定向: " + hit.getType() + " && EXTRA()" + hit.getExtra() + "------"); -
Log.e("重定向", "GetURL: " + view.getUrl() + "\n" +"getOriginalUrl()"+ view.getOriginalUrl()); -
Log.d("重定向", "URL: " + url); -
} -
-
if (url.startsWith("http://") || url.startsWith("https://")) { //加载的url是http/https协议地址 -
view.loadUrl(url); -
return false; //返回false表示此url默认由系统处理,url未加载完成,会继续往下走 -
-
} else { //加载的url是自定义协议地址 -
try { -
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); -
context.startActivity(intent); -
} catch (Exception e) { -
e.printStackTrace(); -
} -
return true; -
} -
-
}
https://img-blog.csdnimg.cn/8b76639e968c454290e63c0f1993325b.png
此外,webview在加载的url为下载链接时需要再做下处理,需要用到 setDownloadListener() 方法,在回调监听中设置当打开的url为下载链接时调用手机浏览器打开下载链接。
-
-
tencentWeb.setDownloadListener(new DownloadListener() {
-
@Override -
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { -
-
// 上面的参数中,url对应文件下载地址,mimetype对应下载文件的MIME类型 -
Intent intent = new Intent(Intent.ACTION_VIEW); -
Uri uri = Uri.parse(url); -
intent.addCategory(Intent.CATEGORY_BROWSABLE); -
intent.setData(uri); -
context.startActivity(intent); -
} -
});
https://img-blog.csdnimg.cn/8838b1b6a77642c183c083ebdb823cd6.png
关于webview更多的探索博主仍在探寻中,本文有不对的地方欢迎指出
————————————————
转载于:https://blog.csdn.net/qq_41188773/article/details/89669354