AndroID WebVIEw的使用方法及与Js 相互调用
1、添加网络权限
<uses-permission androID:name="androID.permission.INTERNET" />
2、WebSettings 对访问页面进行设置。
WebVIEw mWebVIEw = new WebVIEw(this); WebSettings webSettings = mWebVIEw .getSettings();//支持获取手势焦点,输入用户名、密码或其他 mWebVIEw.requestFocusFromtouch(); webSettings.setJavaScriptEnabled(true); //支持Js webSettings.setUseWIDeVIEwPort(true); //将图片调整到适合webvIEw的大小 webSettings.setLoaDWithOverviewmode(true); // 缩放至屏幕的大小 webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。 webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。 webSettings.setdisplayZoomControls(false); //隐藏原生的缩放控件 webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_ColUMN); //支持内容重新布局 webSettings.supportMultiplewindows(); //多窗口 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webvIEw中缓存 webSettings.setAllowfileAccess(true); //设置可以访问文件 webSettings.setNeedInitialFocus(true); //当webvIEw调用requestFocus时为webvIEw设置节点 webSettings.setJavaScriptCanopenwindowsautomatically(true); //支持通过Js打开新窗口 webSettings.setLoadsImagesautomatically(true); //支持自动加载图片 webSettings.setDefaultTextEnCodingname("utf-8");//设置编码格式
3、页面加载方式
//加载一个网页: mWebVIEw.loadUrl(); //加载apk包中的一个HTML页面 mWebVIEw.loadUrl(); //加载手机本地的一个HTML页面的方法: mWebVIEw.loadUrl("content://com.androID.HTMLfileprovIDer/sdcard/test.HTML");
4、WebVIEw 的两个重要方法 WebVIEwClIEnt 和 WebChromeClIEnt
WebVIEwClIEnt就是帮助WebVIEw处理各种通知、请求事件的。
//打开网页时不调用系统浏览器, 而是在本WebVIEw中显示:mWebVIEw.setWebVIEwClIEnt(new WebVIEwClIEnt(){ @OverrIDe public boolean shouldOverrIDeUrlLoading(WebVIEw vIEw,String url) { vIEw.loadUrl(url); return true; }});//将上面定义的webvIEwclinet设置给webvIEw mWebVIEw.setWebVIEwClIEnt(webVIEwClIEnt);
下面介绍 WebVIEw 的一些事件:
WebVIEwClIEnt mWebVIEwClIEnt = new WebVIEwClIEnt() { shouldOverrIDeUrlLoading(WebVIEw vIEw,String url); //在网页上的所有加载都经过这个方法,这个函数我们可以做很多 *** 作。 //比如获取url,查看url.contains(“add”),进行添加 *** 作 shouldOverrIDeKeyEvent(WebVIEw vIEw,KeyEvent event); //重写此方法才能够处理在浏览器中的按键事件。 onPageStarted(WebVIEw vIEw,String url,Bitmap favicon) ; //这个事件就是开始载入页面调用的,我们可以设定一个loading的页面,告诉用户程序在等待网络响应。 onPageFinished(WebVIEw vIEw,String url); //在页面加载结束时调用。同样道理,我们可以关闭loading 条,切换程序动作。 onLoadResource(WebVIEw vIEw,String url) ; // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 onReceivedError(WebVIEw vIEw,int errorCode,String description,String failingUrl); // (报告错误信息) doUpdateVisitedHistory(WebVIEw vIEw,boolean isReload); //(更新历史记录) onFormResubmission(WebVIEw vIEw,Message dontResend,Message resend); //(应用程序重新请求网页数据) onReceivedhttpAuthRequest(WebVIEw vIEw,httpAuthHandler handler,String host,String realm); //(获取返回信息授权请求) onReceivedSslError(WebVIEw vIEw,SslErrorHandler handler,SslError error); //重写此方法可以让webvIEw处理https请求。 onScaleChanged(WebVIEw vIEw,float oldScale,float newScale); // (WebVIEw发生改变时调用) onUnhandledKeyEvent(WebVIEw vIEw,KeyEvent event); //(Key事件未被加载时调用) }
WebChromeClIEnt是辅助WebVIEw处理JavaScript的对话框,网站图标,网站Title,加载进度等。
WebChromeClIEnt mWebChromeClIEnt = new WebChromeClIEnt() { //获得网页的加载进度,显示在右上角的TextVIEw控件中 @OverrIDe public voID onProgressChanged(WebVIEw vIEw,int newProgress) { if (newProgress < 100) { String progress = newProgress + "%"; } else { } } //获取Web页中的Title用来设置自己界面中的Title //当加载出错的时候,比如无网络,这时onReceiveTitle中获取的标题为 找不到该网页,//因此建议当触发onReceiveError时,不要使用获取到的Title @OverrIDe public voID onReceivedTitle(WebVIEw vIEw,String Title) { MainActivity.this.setTitle(Title); } @OverrIDe public voID onReceivedIcon(WebVIEw vIEw,Bitmap icon) { // } @OverrIDe public boolean onCreateWindow(WebVIEw vIEw,boolean isDialog,boolean isUserGesture,Message resultMsg) { // return true; } @OverrIDe public voID onCloseWindow(WebVIEw window) { } //处理alertd出框,HTML d框的一种方式 @OverrIDe public boolean onjsAlert(WebVIEw vIEw,String message,JsResult result) { // return true; } //处理confirmd出框 @OverrIDe public boolean onjsPrompt(WebVIEw vIEw,String defaultValue,JsPromptResult result) { // return true; } //处理promptd出框 @OverrIDe public boolean onjsConfirm(WebVIEw vIEw,JsResult result) { // return true; }}; //同样,将上面定义的WebChromeClIEnt设置给WebVIEw:webVIEw.setWebChromeClIEnt(mWebChromeClIEnt);
5、调用 Js 代码
WebSettings webSettings = mWebVIEw .getSettings(); webSettings.setJavaScriptEnabled(true);//这里必须设置 mWebVIEw.addJavaScriptInterface(new InsertObj(),"JsObj");
以下方法是 AndroID 和 Js 的交互
public class InsertObj extends Object { private static Activity mActivity; private static WebVIEw mWebVIEw; public InsertObj(Activity activity,WebVIEw webVIEw) { mActivity = activity; mWebVIEw = webVIEw; } //给HTML提供的方法,Js中可以通过:var str = window.JsObj.HTMLcallJava(); 获取到 @JavaScriptInterface public String HTMLcallJava() { return "HTML call Java"; } //给HTML提供的有参函数 : window.JsObj.HTMLcallJava2("IT-homer blog"); @JavaScriptInterface public String HTMLcallJava2(final String result) { return "HTML call Java : " + result; } //HTML给我们提供的函数 @JavaScriptInterface public static voID JavacallHTML() { mActivity.runOnUiThread(new Runnable() { @OverrIDe public voID run() { //这里是调用方法 mWebVIEw.loadUrl("JavaScript: showFromHTML()"); Toast.makeText(mActivity,"clickBtn",Toast.LENGTH_SHORT).show(); } }); } //HTML给我们提供的有参函数 @JavaScriptInterface public static voID JavacallHTML2(final String param) { mActivity.runOnUiThread(new Runnable() { @OverrIDe public voID run() { mWebVIEw.loadUrl("JavaScript: showFromHTML2('"+param+"')"); Toast.makeText(mActivity,"clickBtn2",Toast.LENGTH_SHORT).show(); } }); }}
<!DOCTYPE HTML><HTML><head><Meta content="text/HTML; charset=utf-8" http-equiv="Content-Type"><Title>无标题 1</Title><script type="text/JavaScript"> function HTMLcallJava(){ var str = window.JsObj.HTMLcallJava(); alert(str); } function HTMLcallJava2(){ var str = window.JsObj.HTMLcallJava2("HTML"); alert(str); } function showFromHTML() { alert("我是Js方法,我被AndroID后台调用"); } function showFromHTML2(result) { alert("我是Js方法,我被AndroID后台调用 "+result); } </script></head><body><button onclick="HTMLcallJava()">HTMLcallJava</button><button onclick="HTMLcallJava2()">HTMLcallJava2</button></body></HTML>
6、WebVIEw 返回键
public boolean onKeyDown(int keyCode,KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebVIEw.canGoBack()) { mWebVIEw.goBack(); return true; } return super.onKeyDown(keyCode,event);}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言或者到本站社区交流讨论,大家共同进步!
总结以上是内存溢出为你收集整理的Android WebView的使用方法及与JS 相互调用全部内容,希望文章能够帮你解决Android WebView的使用方法及与JS 相互调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)