转: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

Android Webview与Html5交互的更多相关文章

  1. [android] WebView与Js交互

    获取WebView对象 调用WebView对象的getSettings()方法,获取WebSettings对象 调用WebSettings对象的setJavaScriptEnabled()方法,设置j ...

  2. Android Webview 与JS交互

    Android中 WebView控件支持JS与本地代码的交互. // 是否允许在webview中执行javascript webSettings.setJavaScriptEnabled(true); ...

  3. Android WebView与JavaScript交互操作(Demo)

    应用场景: 为了使Android移动项目能够在较短的时间内完成开发,同时降低技术人员开发的成本投入,往往会采用Hybrid APP的开发模式.相关Hybrid APP(混合型应用)参看:http:// ...

  4. Android WebView和JavaScript交互

    JavaScript在现在的网页设计中用得很多,Android 的WebView可以载入网页,WebView也设计了与JavaScript通信的桥梁.这篇主要介绍一下WebViewk控件如何和Java ...

  5. Android Webview 和Javascript交互,实现Android和JavaScript相互调用

    在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好 ...

  6. Android WebView与JavaScript交互实现Web App

    当我们去开发一个基于web的android app时,我们第一须要处理的就是与JavaScript的交互问题.Android须要做的事情就是开放某些特定的接口供web里的JavaScript调用,能够 ...

  7. android webview开启html5支持

    最近做的一个小项目需要用到webview.虽然只是一个简单的网页,但是由于以前用的都只是显示本地文件,没有显示网页文件.现在需要显示网页文件,发现许多网站的webapp做的挺不错的,无论是显示还是用户 ...

  8. JsBridge & Android WebView

    JsBridge & Android WebView webview loadUrl addJavascriptInterface .setJavaScriptEnabled(true); f ...

  9. Android与html5交互 -- WebView使用(一)

    Android中使用WebView可加载html5,具体步骤如下: (前提:本地Html5存放到assets文件夹下) 一:使用WebView加载Html5,简单显示 1:清单文件中添加访问权限:an ...

随机推荐

  1. c# 数据库缓存依赖

    1.为缓存依赖项启动通知数据库 在vs开发人员命令提示中运行(切换到aspnet_regsql.exe所在目录,示例目录:C:\Windows\Microsoft.NET\Framework64\v4 ...

  2. java 短信发送例子 2

    package com.google; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStr ...

  3. OpenGL教程之碰撞检测与模型运动

    下面我们要讨论的是如何快速有效的检测物体的碰撞和合乎物理法则的物体运动,先看一下我们要学的: 1)碰撞检测 ·移动的范围 — 平面 ·移动的范围 — 圆柱 ·移动的范围 — 运动的物体 2)符合物理规 ...

  4. Python闭包及装饰器

    Python闭包 先看一个例子: def outer(x): def inner(y): return x+y return innder add = outer(8) print add(6) 我们 ...

  5. CSS发抖

    纯CSS发抖  当您在 @keyframes 中创建动画时,请把它捆绑到某个选择器,否则不会产生动画效果. 通过规定至少以下两项 CSS3 动画属性,即可将动画绑定到选择器: 规定动画的名称 规定动画 ...

  6. css3变形讲解

    Transform变形:可以实现文字或者图片旋转.缩放.倾斜和移动,并且该元素下的所有子元素都随着父元素一样. 既然接触到transform,我们就可以做好多3d的效果啦 旋转:transform:r ...

  7. Nginx 变量漫谈(一)

    Nginx 的配置文件使用的就是一门微型的编程语言,许多真实世界里的 Nginx 配置文件其实就是一个一个的小程序.当然,是不是“图灵完全的”暂且不论,至少据我观察,它在设计上受 Perl 和 Bou ...

  8. 一个失误导致微信下载图片接口Token失效

    公司的应用调了一个微信上传下载图片的接口,本来在线上跑的好好的,什么问题没有,但是这两天总是不定时的出现下载下来的图片损坏,拿着Token和serverid去接口测试网页验证,返回的是Token失效了 ...

  9. Android Studido下的应用性能优化总结--布局优化

    前言:一个应用的成功=产品设计*性能 ,再此我们不讨论一个应用的设计,那交给我们可爱又可恨的产品经理和UI设计师来决定!所以这里分步骤讨论如何提升一个应用的性能,这里先探讨布局优化问题. 布局优化 避 ...

  10. index seek与index scan

    原文地址:http://blog.csdn.net/pumaadamsjack/article/details/6597357 低效Index Scan(索引扫描):就全扫描索引(包括根页,中间页和叶 ...