转:http://fangjie.info/?p=417#more-417

一、WebView.setWebViewClient(new MyWebViewClient());

1.public boolean shouldOverrideUrlLoading(WebView view, String url) {        onWebPageShouldLoad(view, url);  //通过       return true;  }

在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。

坑爹之处1:Android 2.3.x WebView中的两个搞笑的bug :http://blog.csdn.net/thestoryoftony/article/details/7844287

解决办法:将逻辑加在onPageStarted中处理。

2.public void onPageStarted(WebView view, String url, Bitmap favicon) {}

在页面加载开始时调用。

shouldOverrideUrlLoading与onPageStarted区别:
当点击页面中的链接的时候他们俩都会执行,但是返回到上一个页面的时候onPageStarted会执行,但是shouldOverrideUrlLoading就不执行了,就是onPageStarted什么时候都执行的

public void onPageFinished(WebView view, String url) {       onWebPageLoaded(view, url); }

在页面加载结束时调用。

二、WebView.setWebChromeClient(new MyWebChromeClient());

public void onReceivedTitle(WebView view, String title) {//设置Actionbar的Title}public void onProgressChanged(WebView view, int progress) {//设置页面加载进度}@Overridepublic boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {//弹出框处理(alert,confirm)}

三、WebView.addJavascriptInterface(jsObject, “jsObj”);

  1.先写一个接口类

public class JsInteface{//分享相关的内容private String mTitle;private String mDes;private String mLink;private String mImgUrl;private String mBigImgUrl;@JavascriptInterfacepublic void setShareContent(String Title,String Des,String Link,String ImgUrl,String BigImgUrl){     mTitle=Title;     mDes=Des;     mLink=Link;     mImgUrl=ImgUrl;     mBigImgUrl=BigImgUrl;     Log.i("OUTPUT", "11title:"+mTitle+"  desc:"+mDes+"   mLink"+mLink+"    mImgUrl"+mImgUrl+"    mBigImgUrl"+mBigImgUrl);}}

2.向webview中注入接口类的对象
WebView.addJavascriptInterface(jsObject, “jsObj”);

3.调用注入对象的js

mWebView.loadUrl("javascript:window.jsObj.setShareContent(document.getElementById('app_title').innerHTML,"    + "document.getElementById('app_desc').innerHTML,"    + "document.getElementById('app_link').innerHTML,"    + "document.getElementById('app_img_url').src,"    + "document.getElementById('app_big_img_url').src)");

坑爹之处2:Webview.addJavascriptInterface() does not work on API 17
http://stackoverflow.com/questions/16353430/appview-addjavascriptinterface-does-not-work-on-api-17

解决办法:在接口方法前加上@JavascriptInterface,并且引入该类,import android.webkit.JavascriptInterface;

四、WebView.setOnKeyListener(new View.OnKeyListener()

  mWebView.setOnKeyListener(new View.OnKeyListener() {              @Override              public boolean onKey(View v, int keyCode, KeyEvent event) {                  if (event.getAction() == KeyEvent.ACTION_DOWN) {                      if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {  //表示按返回键                        mWebView.goBack();   //后退                           return true;    //已处理                      }                  }                  return false;              }          });

这段代码是监听back按键使webview后退一个页面而不是退出webview,类似于浏览器中的后退按键。

五、WebView.setDownloadListener(new MyDownloadListener());

这个API可以做下载方面的处理,自己在项目中没有使用到,这里就不做解释了。

更多相关文章

  1. Android(安卓)7.0 SystemUI Recent浅析
  2. Android(安卓)PageAdapter翻译
  3. Android(安卓)应用程序运行shell命令
  4. android java 执行shell命令(笔记)
  5. android ImageUtils 图片处理工具类
  6. Android中点击事件之KeyListener实现步骤
  7. android startActivityForResult
  8. Android(安卓)开发中的常用的上传下载接口
  9. android页面切换动画

随机推荐

  1. NPS内网穿透穿透
  2. <JVM中篇:字节码与类的加载篇>04-再谈类的加
  3. BitWarden密码管理器自建
  4. Docker搭建Poste.io邮箱【保姆级教程】
  5. <JVM下篇:性能监控与调优篇>01-概述篇-02-
  6. <JVM下篇:性能监控与调优篇>03-JVM监控及
  7. <JVM下篇:性能监控与调优篇>补充:浅堆深堆
  8. <JVM下篇:性能监控与调优篇>补充:使用OQL语
  9. <JVM下篇:性能监控与调优篇>04-JVM运行时
  10. <JVM上篇:内存与垃圾回收篇>01-JVM与Java