此篇讲解 Android webview 显示js页面
点击js页面中的某个按钮(登录,支付等等...) 从而进行相应的Android端的操作
即获取WebView加载页面中的某个按钮的行为 调用Android端的操作
比如
1.H5页面中有一个支付按钮 点击此按钮 跳转支付宝操作
2.H5页面中有一个登录按钮 点击此按钮判断是否登录 否的话调起Android端的登录行为
类似以上两中操作都可以在webview中实现
实现方法
重写WebViewClient 中的shouldOverrideUrlLoading
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
};
注:
shouldOverrideUrlLoading的返回值问题
1、 默认返回:return super.shouldOverrideUrlLoading(view, url); 这个返回的方法会调用父类方法,也就是跳转至手机浏览器,平时写webview一般都在方法里面写 webView.loadUrl(url); 然后把这个返回值改成下面的false。
2、返回: return true; webview处理url是根据程序来执行的。
3、返回: return false; webview处理url是在webview内部执行。
登录时
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
登录操作 "web/login
" 以个人项目h5返回值为例。
if(url.contains("web/login")){Intent intent=new Intent(WebViewActivity.this,LoginActivity.class);
startActivity(intent);
}
return false;
};
支付时
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);支付操作(以支付宝为例)
if(url.contains("https://mapi.alipay.com")){//相应的支付操作}
return false;
};
webview加载网页时 会遇到图片不显示问题尤其是在Android 5.0以上(偶尔)
问题原因
webview.loadUrl(firsturl);
webview加载的网页路径是http时是不会出现这样的问题的
当加载的路径是https时 可能会出现这样的问题
1.WebViewClient 重写的方法中有一个onReceivedSslError方法
public void onReceivedSslError(WebView view, android.webkit.SslErrorHandler handler, android.net.http.SslError error) {
handler.proceed();//接受信任所有网站的证书
handler.cancel();//默认操作 不处理
handler.handleMessage(null);//可做其他处理
};
2.
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}webview.getSettings().setBlockNetworkImage(false);