Android WebView与Js交互
第一个帖子中非常详细的介绍了里面的方法:
http://blog.csdn.net/carson_ho/article/details/64904691
第二个是WebView里面的方法
http://blog.csdn.net/l_lhc/article/details/50717790
import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.util.Log; import android.view.Menu; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebSettings.ZoomDensity; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends Activity { private WebView webView; @SuppressLint("JavascriptInterface") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webView); //通过webviwe加载html页面,本地的 // webView.loadUrl("http://www.jd.com"); WebSettings webSet = webView.getSettings(); webSet.setDefaultTextEncodingName("utf-8"); // webSet.setBuiltInZoomControls(true);//允许放大缩小 webSet.setJavaScriptEnabled(true);//设置js有效 webView.loadUrl("file:///android_asset/index.html"); //向js传递后台验证的方法及对象 CheckData cd = new CheckData(); webView.addJavascriptInterface(cd, "checkDataObject"); // //添加WebViewClient客户端,处理加载网络html跳转到浏览器的效果,重写shouldOverrideUrlLoading, //返回false表示自己不处理,true自己处理 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub boolean b = super.shouldOverrideUrlLoading(view, url); Log.d("main", "---------------------"+b); return b; } }); //js中的alert,confirm无效,设置WebChromeClient使得有效 webView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {//result代表系统自带的alert警示框 // TODO Auto-generated method stub AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); dialog.setTitle("警告框") .setMessage(message) .setIcon(R.drawable.ic_launcher) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //提交系统自带的警示框 result.confirm();// } }).show(); return true;//表示自己处理了警告框 } @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { // TODO Auto-generated method stub AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); dialog.setTitle("确认框") .setMessage(message) .setIcon(R.drawable.ic_launcher) .setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.confirm(); // webView.loadUrl("success.html"); // startActivity(new Intent(MainActivity.this,SuccessActivity.class)); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.cancel(); } }).create().show(); return true; } }); } class CheckData{ @JavascriptInterface public void loginCheck(String name,String psw){ Log.d("main", name+","+psw+"--------------------------------"); if("admin1".equals(name) && "123456".equals(psw)){ Log.d("main", "99999999999999999999999"); webView.loadUrl("javascript:tiao()"); // return true; }else{ // return false; } } } public void dealWebView(View view){ switch (view.getId()) { case R.id.btn1: if(webView.canGoBack()){ webView.goBack(); } break; case R.id.btn2: if(webView.canGoForward()){ webView.goForward(); } break; case R.id.btn3: webView.zoomIn(); break; case R.id.btn4: webView.zoomOut(); break; default: break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }