转: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) {
//设置页面加载进度
} @Override
public 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; @JavascriptInterface
public 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可以做下载方面的处理,自己在项目中没有使用到,这里就不做解释了。

public class JsInteface{
//分享相关的内容
private String mTitle;
private String mDes;
private String mLink;
private String mImgUrl;
private String mBigImgUrl;

@JavascriptInterface
public 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

最新文章

  1. Linux:Vmware安装linux虚拟机,桥接方式配置静态IP后重启网卡,提示:Error,some other host already uses address 10.252.252.21...
  2. zabbix监控模式、分布式、自动化
  3. First MarkDown Blog
  4. HDU 4750
  5. 【转载】git命令和svn的对比
  6. Java 8 正式发布,新特性全搜罗
  7. Eval 表达式 GridView ItemCommand
  8. Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
  9. Python爬虫入门项目
  10. ffmpeg日志调式
  11. Python连接MySQL数据库之pymysql模块
  12. 2017-2018-1 20155228 《数学建模》 MatlabR2017a安装教程
  13. def 函数的不定长函数
  14. Java多线程-----实现生产者消费者模式的几种方式
  15. 原生js实现类的添加和删除,以及对数据的add和update、view ,ajax请求 ,页面离开的操作
  16. JS获取元素属性
  17. 开源|如何使用CNN将视频从2D到3D进行自动转换(附源代码)
  18. Mui --- 学习笔记
  19. Android逆向系列文章— Android基础逆向(6)
  20. 连接GitHub的方法

热门文章

  1. AFNetworking自我总结
  2. Mysql查询高速缓存区
  3. Struts2注解学习1
  4. hasClass方法 动画方法说明
  5. SQLServer 2012 可视化窗口中,设置“时间”默认值为“当前时间"
  6. seajs路径问题及源码分析
  7. 如何重载浏览器 onload 事件后加载的资源文件
  8. bzoj2015 [Usaco2010 Feb]Chocolate Giving
  9. poj 1458 Common Subsequence_最长公共子串
  10. linux命令学习笔记