在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目录下

  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编码指定编码方式.

[java] view plaincopy

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

WebView默认是不支持JavaScript 、IFrame或者是任何的框架语法的。通过设置webview.getSettings().setJavaScriptEnabled(true);  就可以打开JavaScript.

  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
         onReceivedHttpAuthRequest

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

onCloseWindow(关闭WebView)
         onCreateWindow()
         onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出)
         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理论上就能有大部分需要实现的特色了。

[java] view plaincopy

 
  1. webview.setWebChromeClient(new MyWebChromeClient());
  2. webview.setWebViewClient(new WebViewClient()
  3. {
  4. @Override
  5. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  6. // TODO Auto-generated method stub
  7. //              return super.shouldOverrideUrlLoading(view, url);
  8. view.loadUrl(url);
  9. return true;
  10. }
  11. @Override
  12. public void onPageStarted(WebView view, String url, Bitmap favicon) {
  13. // TODO Auto-generated method stub
  14. super.onPageStarted(view, url, favicon);
  15. mProgressDialog.show();
  16. }
  17. @Override
  18. public void onPageFinished(WebView view, String url) {
  19. // TODO Auto-generated method stub
  20. super.onPageFinished(view, url);
  21. mProgressDialog.hide();
  22. }
  23. });
[java] view plaincopy

 
  1. private class MyWebChromeClient extends WebChromeClient
  2. {
  3. @Override
  4. public void onReceivedTitle(WebView view, String title) {
  5. // TODO Auto-generated method stub
  6. super.onReceivedTitle(view, title);
  7. textview.setText(title);
  8. }
  9. }

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的目的。

[java] view plaincopy

 
  1. public class JavaScriptInterfaceDemo
  2. {
  3. public void getResposeCode(final String msg)
  4. {
  5. mHandler.post(new Runnable()
  6. {
  7. @Override
  8. public void run() {
  9. // TODO Auto-generated method stub
  10. }
  11. }
  12. }

调用的地方

[java] view plaincopy

 
  1. webview.addJavascriptInterface(new JavaScriptInterfaceDemo( this ), "JSInterfaceDemo");
1.如何播放: 
       近来工作要用Android的webview播放HTML5 video标签。做了下试验,用Android自带的Browser可以装载含有video标签的HTML5页面,而且能正常播放,但同样的网页用webview来加载就没法播放HTML5中的video。

在网上查了许多资料,所查的资料可以参考我转载那些文章,经过无数次测试,终于成功了,做法如下:
        第一步当然是要先有个Webivew对象,是写在main.xml也好,或者动态创建也罢,总之有了一个Webview对象即可,假设其名为m_webview,然后设置一些属性:
                m_webview.getSettings().setJavaScriptEnabled(true);         
        m_webview.setWebChromeClient(m_chromeClient);
本来以为要设置m_webview.getSettings().setPluginsEnabled(true);但后来发现去掉后也不影响效果。上面主要的是setWebChromeClient这个,要设置一个WebChromeClient对象给webview,WebChromeClient对象这样创建:

private WebChromeClient m_chromeClient = new WebChromeClient(){
   @Override
   public void onShowCustomView(View view, CustomViewCallback callback) {
       // TODO Auto-generated method stub
   }    
};
       
       onShowCustomView函数中什么也不用写,有篇文章http://blog.csdn.net/wolfman79/article/details/7868975还在那个函数里进行了实现,调用了video.start()之类的东西,但我测试了一下,发现那个函数根本就没有被调用,所以那个函数里的实现就都去掉了。

2.如何在activity结束时停止播放:
     
能够播放视频了,但发现当activity结束时,视频在后边还在播放,实在令人烦恼,又查了一通资料,终于找到解决方法,非常简单,就是在activity的onPause函数中调用webview的onPause函数即可。

以上是Android 4.0.3中实现的,在Android2.2,2.3这些版本没有试过,未必起作用

 

在做美图欣赏Android应用的时候,其中有涉及到Android应用下载的功能,这个应用本身其实也比较简单,就是通过WebView控制调用相应的WEB页面进行展示。刚开始以为和普通的文件下载实现,只需要一个链接,然后点击就可以实现下载了,可是放到手机上试的时候,点击下载链接一点反应都没有,在普通页面里面点击是好的,且点击其它的普通链接是可以正常工作的。原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置WebView的DownloadListener,通过实现自己的DownloadListener来实现文件的下载。具体操作如下:

1、设置WebView的DownloadListener:

webView.setDownloadListener(new MyWebViewDownLoadListener());

2、实现MyWebViewDownLoadListener这个类,具体可以如下这样:

[java] view plaincopy

 
  1. private class MyWebViewDownLoadListener implements DownloadListener {
  2. @Override
  3. public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
  4. long contentLength) {
  5. Uri uri = Uri.parse(url);
  6. Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  7. startActivity(intent);
  8. }
  9. }

这只是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载,不过,这也基本上满足我们的应用场景了。

转-- WebView使用实例(html5、文件下载和远程URL)的更多相关文章

  1. Android webView 缓存 Cache + HTML5离线功能 解决

    时间 -- :: CSDN博客 原文 http://blog.csdn.net/moubenmao/article/details/9076917 主题 Android HTML5 WebView的缓 ...

  2. Android WebView 总结 —— 使用HTML5播放视频及全屏方案

    在APP开发的过程中,会碰到需要在WebView中播放视频的需求,下面讲解一下如何在WebView中使用html5播放视频. 1.让视频在各个Android版本能够正常播放 在AndroidManif ...

  3. 每天一个JavaScript实例-html5拖拽

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. php使用curl简单抓取远程url的方法

    这篇文章主要介绍了php使用curl简单抓取远程url的方法,涉及php操作curl的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php使用curl抓取远程url的方法.分 ...

  5. HTML5无刷新修改URL

    HTML5新添加了两个api分别是pushState和replaceState,DOM中的window对象通过window.history方法提供了对浏览器历史记录的读取,可以在用户的访问记录中前进和 ...

  6. file_get_contents抓取远程URL内容

    /** * POST URL * @param $url * @param null $post * @return false / string */ public static function ...

  7. 怎么用程序获取远程url执行后的图片地址

    远程URL:https://121.199.16.229:8890/generate.cgi?rbid=1001&esn=22021434025005&pic=png&coun ...

  8. java读取远程url图片,得到宽高

    链接地址:http://blog.sina.com.cn/s/blog_407a68fc0100nrb6.html import java.io.IOException;import java.awt ...

  9. post请求远程url 报错“基础连接已经关闭...Authentication.AuthenticationException...远程证书无效”解决方案

    当我们有时用代码编写post请求url远程地址会报“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系. ---> System.Security.Authentication.A ...

随机推荐

  1. 【P1326】超级教主

    DP优化 原题: LHX教主很能跳,因为Orz他的人太多了.教主跳需要消耗能量,每跳1米就会消耗1点能量,如果教主有很多能量就能跳很高.教主为了收集能量,来到了一个神秘的地方,这个地方凡人是进不来的. ...

  2. Windows下IntelliJ IDEA中运行Spark Standalone

    ZHUAN http://www.cnblogs.com/one--way/archive/2016/08/29/5818989.html http://www.cnblogs.com/one--wa ...

  3. 二十四种设计模式:原型模式(Prototype Pattern)

    原型模式(Prototype Pattern) 介绍用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象.示例有一个Message实体类,现在要克隆它. MessageModel usin ...

  4. SVG添加链接(转载)

    转载地址:http://tech.techweb.com.cn/thread-258715-1-1.html 最基本的交互形式是链接.在 SVG 中,通过一个 <a> 标签提供链接,这与 ...

  5. struts2 的简单实例应用

    功能:本实例实现的功能是从输入界面输入用户名和密码,若用户名和密码正确转到成功界面,否则转到失败界面. 1)在创建了一个JavaWeb工程后,导入struts2的核心支持包库. 2)web项目右击-M ...

  6. bash内部命令-1

    外置命令 date expr seq nohup tput bash内置命令 trap set shopt date Linux时钟分为系统时钟(System Clock)和硬件(Real Time ...

  7. android 完全退出应用程序(重要)

    android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个A ...

  8. The launch will only sync the application package on the device!

    在开始学习Android的开发时,有时候可能刚写完一个布局文件,就急忙忙的运行程序,此时会毫不留情的在控制台报错:No Launcher activity found! The launch will ...

  9. 数据结构线性表(js实现)

    最近在复习数据结构的过程中,发现基本上数据结构都是用C来实现的,自己之前学习的时候也是用C去写的,由于目前对js更为熟悉一些,所以这里选择使用js去实现其中的某些算法和结构.实际上算法和语言关系不大, ...

  10. VLOOKUP 函数

    如果需要在表格或区域中按行查找内容,可使用 VLOOKUP,它是一个查找和引用函数.例如,按部件号查找汽车部件的价格. =VLOOKUP(要查找的值.要在其中查找值的区域.区域中包含返回值的列号.精确 ...