1.webview 与javascript进行交互 :
①在和H5交互时,实例名称例如:“android”应该尽量避免javascript中的关键字,例如;window,history等等,可能会出现无法识别现象
②targetSdkVersion 大于17时需要在JavaScript实例对象中的函数加上@JavascriptInterface注解,否则会找不到函数,无法交互
webView.addJavascriptInterface(new JsAObjInterFace(){
@JavascriptInterface
public void Test(){}
},"android");
③webView.setWebViewClient(new WebViewClient()
{
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// TODO Auto-generated method stub
isError=true;
}
});监听中onPageFinished()在Android4.4上会调用两次,如果需要自己处理加载失败特殊显示等操作时,为了适配问题,尽量不要在此函数中进行逻辑处理
可在
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
// TODO Auto-generated method stub
result.confirm();
return super.onJsConfirm(view,url,message, result);
}
//
@Override
public boolean onJsConfirm(WebView view, String url,
String message, JsResult result) {
// TODO Auto-generated method stub
result.confirm();
return true;
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress == 100) {
// 网页加载完成
if(isError==true){
}else{
}
} else {
// 加载中
}
}
});处理,当webview加载网页中还有对话框和确认框时,需要做出回应,防止二次加载出现空白问题,但是Android6.0系统中newProgress=100也会调用两次,所有iserror应该在webview重加载过程中设置为false,就可解决了