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;
    }

}

 

posted @ 2017-10-19 21:14  菜鸟东东  阅读(169)  评论(0编辑  收藏  举报