Android WebView的使用方法及与JS 相互调用

Android WebView的使用方法及与JS 相互调用,第1张

概述AndroidWebView的使用方法及与JS相互调用1、添加网络权限<uses-permissionandroid:name=\"android.permission.INTERNET\"/>

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 相互调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存