android WebView加载h5网站嵌到淘宝链接页面报错问题
WebView加载h5网站嵌到淘宝链接页面报错问题
android混合开发,使用WebView嵌套h5网站。在h5
网站中放了一个按钮。点击按钮会打开第三方链接。如:淘宝,京东,拼多多等。这时候app就会报一个错误。图如下:
淘宝的就是taobao://什么的,京东,类似。
解决方案:
网上好多的解读是说要让webview使用WebChromeClient这种方式。
但是我自己的已经是这个模式了。问题还没解决。后来我又想到问题是点击按钮出现。页面好像不归webview管
直到后来看到https://www.jianshu.com/p/119823e5cfb5 简书上这位作者写 的。webview就好像是我们浏览器,虽然按钮打开页面的操作是在h5里面的,但是所有的请求都会经过webview,一些特殊的请求如“淘宝,京东” 他们打开以后页面会自动执行一个唤起手机app的链接。这个链接不是http打头的。浏览器不能识别就会报错。
这时候就需要过滤请求。
//拦截请求。过滤特殊请求。
public WebViewClient webViewClient = new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// 不要使用super,否则有些手机访问不了,因为包含了一条 handler.cancel()
// super.onReceivedSslError(view, handler, error);
// 接受所有网站的证书,忽略SSL错误,执行访问网页
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView wv, String url) {
if(url == null) return false;
try {
if(url.startsWith("weixin://") //微信
|| url.startsWith("alipays://") //支付宝
|| url.startsWith("mailto://") //邮件
|| url.startsWith("tel://")//电话
|| url.startsWith("dianping://")//大众点评
|| url.startsWith("tbopen://")//淘宝
|| url.startsWith("openapp.jdmobile://")//淘宝
|| url.startsWith("tmast://")//淘宝
//其他自定义的scheme
) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
} catch (Exception e) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
return true;//没有安装该app时,返回true,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
}
//处理http和https开头的url
wv.loadUrl(url);
return true;
}
};
记得在webview中setWebViewClient
webView=(WebView)findViewById(R.id.web_view);
//加载url
webView.loadUrl(url);
//添加请求拦截
webView.setWebViewClient(webViewClient);
新手小白,个人总结记录。轻喷。