Android-----js和android的互调
16lz
2021-01-23
http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/
我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍,
这些我会在注释中一一讲解。
Javascript弹出框有如下三种:
Java代码
WebChromeClient 中对三种dialog进行了捕捉,但不幸的是,并没有回调函数可以使用,
或者说不能获得用户是点击“OK”还是“CANCEL”的操作结果。
个人以为,这些方法的设置是为了对一些涉及到html操作的应用程序进行测试时使用的。
在WebChromeClient中还有以下的方法:
Java代码
这些方法的使用我会在以后的博文中讲到.
请大家先看今天讲解的重点
Java代码
我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍,
这些我会在注释中一一讲解。
Javascript弹出框有如下三种:
Java代码
- alert();
- window.confirm("Areyousrue?");
- window.prompt("Pleaseinputsomeword";,"thisistext");
WebChromeClient 中对三种dialog进行了捕捉,但不幸的是,并没有回调函数可以使用,
或者说不能获得用户是点击“OK”还是“CANCEL”的操作结果。
个人以为,这些方法的设置是为了对一些涉及到html操作的应用程序进行测试时使用的。
在WebChromeClient中还有以下的方法:
Java代码
- onProgressChanged(WebViewview,intnewProgress);
- onReceivedIcon(WebViewview,Bitmapicon);
- onReceivedTitle(WebViewview,Stringtitle);
- onRequestFocus(WebViewview);
- onCloseWindow(WebViewwindow);
- onProgressChanged(WebViewview,intnewProgress)
这些方法的使用我会在以后的博文中讲到.
请大家先看今天讲解的重点
Java代码
- publicclassWebViewDemoextendsActivity{
- privatestaticfinalStringLOG_TAG="WebViewDemo";
- privateWebViewmWebView;
- privateTextViewmReusultText;
- privateHandlermHandler=newHandler();
- @Override
- publicvoidonCreate(Bundleicicle){
- 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几乎浏览器的所有设置都在该类中进行
- WebSettingswebSettings=mWebView.getSettings();
- webSettings.setSavePassword(false);
- webSettings.setSaveFormData(false);
- webSettings.setJavaScriptEnabled(true);
- webSettings.setSupportZoom(false);
- mWebView.setWebChromeClient(newMyWebChromeClient());
- /*
- *DemoJavaScriptInterface类为js调用android服务器端提供接口
- *android作为DemoJavaScriptInterface类的客户端接口被js调用
- *调用的具体方法在DemoJavaScriptInterface中定义:
- *例如该实例中的clickOnAndroid
- */
- mWebView.addJavascriptInterface(newDemoJavaScriptInterface(),"androd");
- mWebView.loadUrl("file:///android_asset/page.html");
- }
- finalclassDemoJavaScriptInterface{
- DemoJavaScriptInterface(){}
- /**
- *该方法被浏览器端调用
- */
- publicvoidclickOnAndroid(){
- mHandler.post(newRunnable(){
- publicvoidrun(){
- //调用js中的onJsAndroid方法
- mWebView.loadUrl("javascript:onJsAndroid()");
- }
- });
- }
- }
- /**
- *继承WebChromeClient类
- *对js弹出框时间进行处理
- *
- */
- finalclassMyWebChromeClientextendsWebChromeClient{
- /**
- *处理alert弹出框
- */
- @Override
- publicbooleanonJsAlert(WebViewview,Stringurl,
- Stringmessage,JsResultresult){
- Log.d(LOG_TAG,"onJsAlert:"+message");
- mReusultText.setText("Alert:"+message);
- //对alert的简单封装
- newAlertDialog.Builder(WebViewDemo.this).
- setTitle("Alert").setMessage(message).setPositiveButton("OK",
- newDialogInterface.OnClickListener(){
- @Override
- publicvoidonClick(DialogInterfacearg0,intarg1){
- //TODO
- }
- }).create().show();
- result.confirm();
- returntrue;
- }
- /**
- *处理confirm弹出框
- */
- @Override
- publicbooleanonJsConfirm(WebViewview,Stringurl,Stringmessage,
- JsResultresult){
- Log.d(LOG_TAG,"onJsConfirm:"+message);
- mReusultText.setText("Confirm:"+message);
- result.confirm();
- returnsuper.onJsConfirm(view,url,message,result);
- }
- /**
- *处理prompt弹出框
- */
- @Override
- publicbooleanonJsPrompt(WebViewview,Stringurl,Stringmessage,
- StringdefaultValue,JsPromptResultresult){
- Log.d(LOG_TAG,"onJsPrompt:"+message);
- mReusultText.setText("Promptinputis:"+message);
- result.confirm();
- returnsuper.onJsPrompt(view,url,message,message,result);
- }
- }
- }
更多相关文章
- Android getResources().getConfiguration()方法的作用
- Android 屏幕操作原理
- Android读取文件方法总结
- H5案例分享:使用JS判断客户端、浏览器、操作系统类型
- Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Mac安装android studio后卡在building gradle project info的解
- appium 【已解决】Android,每次启动手机中都会安装Appium setting
- android 图片压缩的几种方法