在Android中有WebView Widget,它内置了WebKit引擎,同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源的浏览器引擎,Chrome浏览器也是基于它的。所以很多表现WebView和Chrome是一样的。


         在使用WebView之前,要在AndroidManifest.xml中添加 如下权限:

否则会出Web page not available错误。


         1 . 加载网页

              网络用:webView.loadUrl("http://www.baidu.com");
              本地文件用:webView.loadUrl(file:///android_asset/XXX.html);这里的格式是固定的,文件位置 assets目录下

              webview.postUrl(String url, byte[] postData) 加载页面使用Post方式,postData为参数

//    post方式传送参数//    String postData = "clientID = cid & username = name";//    webview.postUrl(url, EncodingUtils.getBytes(postData, "base64"));


         2. 使用loadData方法来加载html数据

              loadData()需要三个参数: HTML TAG ,MIME类型(text/html), 网页编码方式(utf-8).


          使用它时可能会发现有如下问题:

          I.  loadData不能加载图片内容,如果要加载图片内容或者获得更强大的Web支持请使用loadDataWithBaseURL。


          II .使用loadData方法显示乱码。那是因为编码器设置错误导致的。我们知道String类型的数据主要是unicode编码,而WebView一般为了节省资源使用的是UTF-8编码,所以我们在loadData的时候要告诉方法怎样转码。即要告诉它要将unicode编码的内容转成UTF-8编码的内容。有些朋友虽然在loadData的时候设置了编码方式,但是还是显示乱码,这是因为还需要为WebView的text编码指定编码方式.


WebView wv = (WebView)findViewById(R.id.webview) ;String content = getUnicodeContent() ;wv.getSettings().setDefaultTextEncodingName(“UTF -8”) ;wv.loadData(content, “text/html”, “UTF-8”) ;



          WebView默认是不支持JavaScript 、IFrame或者是任何的框架语法的。通过设webview.getSettings().setJavaScriptEnabled(true);  就可以打开JavaScript.  webView.requestFocus()如果不设置的话,会出现不能弹出软键盘等问题。


          3.   setScrollBarStyle 设置滚动条风格

          webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);在内容显示内部显示


          4.  ClearCache  清除缓存内容


          5.  goBcak canGoBack goForward canGoForward


          6.  webView.stopLoading()停止加载页面


         7.  WebViewClient 和 WebChromeClient 区别

         WebView主要负责解析渲染,WebViewClient 和WebChromeClient是用来辅助WebView。


         WebViewClient主要帮助WebView处理各种通知、请求事件的,比如:

         onLoadResource
         onPageStart
         onPageFinish
         onReceiveError

//受到错误时触发,比如400错误,这些错误一般都是无法补救的,最多给出提示信息    @Override    public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {        // TODO Auto-generated method stub        super.onReceivedError(view, errorCode, description, failingUrl);    }


         onReceivedHttpAuthRequest


         WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等比如

         onCloseWindow(关闭WebView)
         onCreateWindow()
         onJsAlert (WebView上alert,Prompt,Confirm无效,需要定制WebChromeClient处理弹出,从而获取网页中的JS,比如使用AlertDialog进行显示),可以参考 http://618119.com/archives/2010/12/20/199.html

         onJsPrompt
         onJsConfirm
         onProgressChanged
         onReceivedIcon
         onReceivedTitle
         看上去他们有很多不同,实际使用的话,如果你的WebView只是用来处理一些html的页面内容,只用WebViewClient就行了,如果需要更丰富的处理效果,比如JS、进度条等,就要用到WebChromeClient。更多的时候,你可以这样


          WebView webView;
          webView= (WebView) findViewById(R.id.webview);
          webView.setWebChromeClient(new WebChromeClient());
          webView.setWebViewClient(new WebViewClient());//.希望点击链接继续在当前browser中响应,必须覆盖 WebViewClient对象。
          webView.getSettings().setJavaScriptEnabled(true);
          webView.loadUrl(url);
          这样你的WebView理论上就能有大部分需要实现的特色了。

        webview.setWebChromeClient(new MyWebChromeClient());                webview.setWebViewClient(new WebViewClient()        {        @Override        public boolean shouldOverrideUrlLoading(WebView view, String url) {        // TODO Auto-generated method stub//        return super.shouldOverrideUrlLoading(view, url);        view.loadUrl(url);        return true;        }        @Override        public void onPageStarted(WebView view, String url, Bitmap favicon) {        // TODO Auto-generated method stub        super.onPageStarted(view, url, favicon);        mProgressDialog.show();        }        @Override        public void onPageFinished(WebView view, String url) {        // TODO Auto-generated method stub        super.onPageFinished(view, url);        mProgressDialog.hide();        }                });


 

private class MyWebChromeClient extends WebChromeClient{@Overridepublic void onReceivedTitle(WebView view, String title) {// TODO Auto-generated method stubsuper.onReceivedTitle(view, title);textview.setText(title);}        }
     

            8.   JS使用

          webview.addJavascriptInterface(new JavaScriptInterfaceDemo( this ), "JSInterfaceDemo");

          //JSInterfaceDemo其实就是JavaScriptInterfaceDemo的别名,供HTML调用时使用


         addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName,比如说JSInterfaceDemo,作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.JSInterfaceDemo访问到绑定的java对象了。在HTML中如何调用呢,"window.JSInterfaceDemo.getResposeCode() " 其中getResposeCode需要在JavaScriptInterfaceDemo中实现


         需要注意的是:addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。

public class JavaScriptInterfaceDemo{public void getResposeCode(final String msg){mHandler.post(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stub                         }}}


             调用的地方

webview.addJavascriptInterface(new JavaScriptInterfaceDemo( this ), "JSInterfaceDemo");


更多相关文章

  1. Android中html.fromhtml的使用方法
  2. Android 5.0 自定义dialog 背景不透明解决方法
  3. 一个关于android中ListView的子控件中按钮事件的简单方法
  4. 开发笔记---软键盘遮挡输入框和导航栏遮挡了内容的解决方案
  5. Android 中的Paint类主要方法
  6. Android设置全屏的方法
  7. Android系统添加全局快捷键的方法

随机推荐

  1. android中的selector背景选择器
  2. android http协议添加Authorization认证
  3. Android(安卓)Gson的使用
  4. H5做的商城客户端,效果很不错
  5. android Adapter综合介绍
  6. versionCode与versionName的区别、应用、
  7. Google Android应用开发04 Android应用程
  8. Android开发资源完全汇总
  9. IDA Pro 远程调试Android进程环境配置
  10. Android(安卓)Studio中Xml的新建及shape