来源google开源项目
[url=http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/]http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/[/url]
我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍,
这些我会在注释中一一讲解。
Javascript弹出框有如下三种:
WebChromeClient 中对三种dialog进行了捕捉,但不幸的是,并没有回调函数可以使用,
或者说不能获得用户是点击“OK”还是“CANCEL”的操作结果。
个人以为,这些方法的设置是为了对一些涉及到html操作的应用程序进行测试时使用的。
在WebChromeClient中还有以下的方法:
这些方法的使用我会在以后的博文中讲到.
请大家先看今天讲解的重点
java代码如上所示,html页面代码放在code文件中,在这不做讲解。
在项目中有两个链接:
导入工程后请配置Build Path, sdk1.6以上版本均可兼容。
[url=http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/]http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/[/url]
我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍,
这些我会在注释中一一讲解。
Javascript弹出框有如下三种:
alert();
window.confirm("Are you srue?");
window.prompt("Please input some word";,"this is text");
WebChromeClient 中对三种dialog进行了捕捉,但不幸的是,并没有回调函数可以使用,
或者说不能获得用户是点击“OK”还是“CANCEL”的操作结果。
个人以为,这些方法的设置是为了对一些涉及到html操作的应用程序进行测试时使用的。
在WebChromeClient中还有以下的方法:
onProgressChanged(WebView view, int newProgress);
onReceivedIcon(WebView view, Bitmap icon);
onReceivedTitle(WebView view, String title);
onRequestFocus(WebView view);
onCloseWindow(WebView window);
onProgressChanged(WebView view, int newProgress)
这些方法的使用我会在以后的博文中讲到.
请大家先看今天讲解的重点
public class WebViewDemo extends Activity {
private static final String LOG_TAG = "WebViewDemo";
private WebView mWebView;
private TextView mReusultText ;
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
//获得浏览器组件
//WebView就是一个简单的浏览器
//android浏览器源码存在于LINUX\android\package\apps\Browser中
//里面的所有操作都是围绕WebView来展开的
mWebView = (WebView) findViewById(R.id.webview);
mReusultText = (TextView) findViewById(R.id.resultText);
//WebSettings 几乎浏览器的所有设置都在该类中进行
WebSettings webSettings = mWebView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
mWebView.setWebChromeClient(new MyWebChromeClient());
/*
* DemoJavaScriptInterface类为js调用android服务器端提供接口
* android 作为DemoJavaScriptInterface类的客户端接口被js调用
* 调用的具体方法在DemoJavaScriptInterface中定义:
* 例如该实例中的clickOnAndroid
*/
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(),"androd");
mWebView.loadUrl("file:///android_asset/page.html");
}
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {}
/**
* 该方法被浏览器端调用
*/
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
//调用js中的onJsAndroid方法
mWebView.loadUrl("javascript:onJsAndroid()");
}
});
}
}
/**
* 继承WebChromeClient类
* 对js弹出框时间进行处理
*
*/
final class MyWebChromeClient extends WebChromeClient {
/**
* 处理alert弹出框
*/
@Override
public boolean onJsAlert(WebView view,String url,
String message,JsResult result) {
Log.d(LOG_TAG,"onJsAlert:"+message");
mReusultText.setText("Alert:"+message);
//对alert的简单封装
new AlertDialog.Builder(WebViewDemo.this).
setTitle("Alert").setMessage(message).setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//TODO
}
}).create().show();
result.confirm();
return true;
}
/**
* 处理confirm弹出框
*/
@Override
public boolean onJsConfirm(WebView view, String url, String message,
JsResult result) {
Log.d(LOG_TAG, "onJsConfirm:"+message);
mReusultText.setText("Confirm:"+message);
result.confirm();
return super.onJsConfirm(view, url, message, result);
}
/**
* 处理prompt弹出框
*/
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
Log.d(LOG_TAG,"onJsPrompt:"+message);
mReusultText.setText("Prompt input is :"+message);
result.confirm();
return super.onJsPrompt(view, url, message, message, result);
}
}
}
java代码如上所示,html页面代码放在code文件中,在这不做讲解。
在项目中有两个链接:
jsDemo为以上代码对应的html
webDemo为google开源项目中的文件
导入工程后请配置Build Path, sdk1.6以上版本均可兼容。