Android webView 注意问题
//解决图片不显示
webView.getSettings().setBlockNetworkImage(false);
//启用地理定位
webSettings.setGeolocationEnabled(true);
//启用数据库
webSettings.setDatabaseEnabled(true);
// 启用地理定位
String dir =this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
// 设置定位的数据库路径
webSettings.setGeolocationDatabasePath(dir);
----------------------------------------------------------------------
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
Log.e(TAG, "onJsAlert: "+ message );
return true;
}
@Override
public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed) {
super.onReceivedTouchIconUrl(view, url, precomposed);
Log.e(TAG +"TouchIconUrl", url);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress ==100) {
// //100 表示成功
progressBar.setVisibility(View.GONE);
}else {
progressBar.setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
}
@Override
public void onGeolocationPermissionsShowPrompt(String s, GeolocationPermissionsCallback geolocationPermissionsCallback) {
geolocationPermissionsCallback.invoke(s,true,false);
super.onGeolocationPermissionsShowPrompt(s, geolocationPermissionsCallback);
}
});
webView.loadUrl(PATH);
//点击链接继续在当前browser中响应
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
iv_back.setVisibility(View.VISIBLE);
Log.i(TAG, "onPageStarted: 链接------->" + url);
// if (PATH != null && url != null && url.equals(PATH)) {
// iv_back.setVisibility(View.GONE);
// } else {
//
// }
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e(TAG, "shouldOverrideUrlLoading:" + url);
progressBar.setVisibility(View.VISIBLE);
view.loadUrl(url);
return true;
}
---------------------------------------------------------------------
shouldOverrideUrlLoading:这个方法的返回值
return true表示当前url即使是重定向url也不会再执行(除了在return true之前使用webview.loadUrl(url)除外,因为这个会重新加载)
return false表示由系统执行url,直到不再执行此方法,即加载完重定向的ur(即具体的url,不再有重定向)
webView 微信 拉起支付问题
首先在public boolean shouldOverrideUrlLoading(WebView webView, String s) {
if (s.startsWith("https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?")) {
isPlayFlag =true;
}
// 如下方案可在非微信内部WebView的H5页面中调出微信支付
if (s.startsWith("weixin://wap/pay?") &&isPlayFlag) {
if(isWxInstall(mContext)){
isPlayFlag =false;
Intent intent =new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(s));
mContext.startActivity(intent);
return true;
}else {
Toast.makeText(mContext, "您未安装微信~ 请安装微信并支付,祝您生活愉快", Toast.LENGTH_SHORT).show();
webView.goBack();
}
}
}
WebView 不支持H5的原生弹窗,注意与他们交流