转载请声明
http://bbs.niuzhi.cc/forum.php?mod=viewthread&tid=16&fromuid=2
然后在在代码中
对于WebChromeClient,WebViewClient的用法,平时我们经常混淆,到底什么时候应该用哪个。
其实对于WebChromeClient,主要处理关于脚本的执行,或progress 等操作
而WebViewClient 主要处理关于页面跳转,页面请求等操作
下面我们对过一个登陆小例子来探讨一下 这两个对象的用法
首先,我们先在assets文件夹里定义test.html文件,内容很简单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>登陆验证小例子</title>
<script>
function login(){
alert("执行登陆");
}
</script>
</head>
<body>
<form method="post">
用户名:<input type="text" name="username"/><br/>
密 码 :
<input type="password" name="password"/><br/>
<input type="button" value="登陆" οnclick="login()"/>
</form>
</body>
</html>
然后在在代码中
private WebView webView=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webView=(WebView) findViewById(R.id.webView); // webView.setWebChromeClient(new MyWebChromeClient());//设置webChromeClient // webView.setWebViewClient(new MyWebClient());
WebSettings settings=webView.getSettings(); settings.setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/test.html");//加载自定义的登陆页 } 这里只实现一个简单的登陆页面这时我们按 登陆按钮,后会没用 login()方法,也就是说会执行alert语句,但我们会发现点击之后没反应,这时我们需要为webView 设置一个
我们加上这一句WebChromeClient()对象
webView.setWebChromeClient(new WebChromeClient());//设置webChromeClient
这时我们再点击登陆就会出现下面一个对话框
这时我们需要重写WebChromeClient的onJsAlert方法自定义我们的alert后的反应
我们先加上
MyWebChromeClient是我们自定义的webView.setWebChromeClient(new MyWebChromeClient());//设置webChromeClient
class MyWebChromeClient extends WebChromeClient{ @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Builder builder=new AlertDialog.Builder(JqueryMobile01Activity.this); builder.setTitle("自定义alert事件"); builder.show(); return super.onJsAlert(view, url, message, result); }