android捕获js中的dialog事件
来源:互联网 发布:农产品流通网络建设 编辑:程序博客网 时间:2024/06/16 01:33
来源google开源项目
http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/
我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍,
这些我会在注释中一一讲解。
Javascript弹出框有如下三种:
alert();
window.confirm("Are you srue?");
window.prompt("Please input some word";,"this is text");
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)
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);
}
}
}
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以上版本均可兼容。
JavaEye下载地址:
http://dl.javaeye.com/topics/download/c8df945d-b5f5-3591-8e32-f70860ce8398
- android捕获js中的dialog事件
- android捕获js中的dialog事件
- JS中的事件捕获和事件冒泡
- js 中的事件冒泡或事件捕获
- js中的事件捕获与事件冒泡
- js中的事件冒泡与事件捕获
- JS中的事件捕获和事件冒泡
- JS中的事件冒泡和事件捕获
- JS中的事件绑定与捕获
- js中的冒泡,捕获以及事件委托
- JS 中的事件冒泡与捕获
- Android捕获javascript中的alert事件
- 关于JS中的事件冒泡和事件捕获
- 关于js中的事件冒泡和事件捕获问题
- js 捕获回车事件
- JS捕获回车事件
- js捕获回车事件
- js键盘捕获事件
- 字节对齐
- Android中WebView方法WebViewClient和WebChromeClient的区别
- C#隐藏窗口的几种方法
- 构建自定义组件
- Java中遍历HashMap的两种方式
- android捕获js中的dialog事件
- poj 2987(Firing)
- java se 学习笔记 之 reflection(反射机制之Array_2)3
- DataGridView如何修改标题
- Android IPC 通讯机制源码分析 ----Albertchen
- cugb 1032 登山(子序列)
- 用bind架设自己的智能DNS
- android中如何判断Android手机当前是否联网?
- ar命令详解