Android WebView与JS页面相互调用(三)

时间:2022-08-23 20:22:06

此篇讲解 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);