android捕获js中的dialog事件
16lz
2021-01-23
来源google开源项目
http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/
我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍,
这些我会在注释中一一讲解。
Javascript弹出框有如下三种:
WebChromeClient 中对三种dialog进行了捕捉,但不幸的是,并没有回调函数可以使用,
或者说不能获得用户是点击“OK”还是“CANCEL”的操作结果。
个人以为,这些方法的设置是为了对一些涉及到html操作的应用程序进行测试时使用的。
在WebChromeClient中还有以下的方法:
这些方法的使用我会在以后的博文中讲到.
请大家先看今天讲解的重点
java代码如上所示,html页面代码放在code文件中,在这不做讲解。
在项目中有两个链接:
导入工程后请配置Build Path, sdk1.6以上版本均可兼容。
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");
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以上版本均可兼容。
更多相关文章
- Could not find SDK_Root\tools\adb.exe 的解决方法
- Android高手进阶教程(八)-------Android中两种设置全屏的方法!!!
- Android Studio导入.so库文件方法
- (转)Android 应用程序退出后不在运行列表中显示的方法
- Android Gallery控件使用方法详解
- Android 设置横屏竖屏的方法
- Android 复习笔记之图解View类的XML属性、相关方法及说明
- Android关于looper的几个方法的个人理解