转: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. [原创]Windows下Google V8 javascript引擎编译

    项目用到将v8嵌入到C++的情况,公司没时间研究,只有在家研究,编译过程一堆坑.记录一下. 网上百度的都是基于vs2010,或者早版本的v8编译,最新版本应该使用vs2013\vs2015.本文介绍的 ...

  2. inflate, findViewById与setContentView的区别与联系

    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...

  3. 程序A+B问题(一次输入和多次输入)

    这是早就会写的题,把它整理一下,比较容易. ➀一次输入数据,计算A+B   #include<stdio.h> #include<stdlib.h> int main() { ...

  4. FormSheet式模态视图,点击模态视图外隐藏模态视图的方法

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  5. Mfgtool

    For bootstrap mode, it refers to the communcation between the host and ROM codes through serial down ...

  6. MYSQL create database 和 create table 做了一些什么!

    create database Studio; 这样就可以创建一个数据库了.他包涵一些什么呢? 可以看到它创建了一个文件夹,下面我们进去看一下它里面有一些什么东西. 还是先建一张表再进去吧,运行一下这 ...

  7. SQL Server 查看当前活动的锁

    第一步: 要查看活动中的锁,如果日前根本就没有活动中的锁怎么办,还好我会自己做一把. begin tran         select * from dbo.Nums         with(ta ...

  8. 使用Java管理Azure(1):基础配置

    Azure针对Java开发人员提供了非常丰富的开发库,开发工具,和相关插件,让你通过Java对Azure进行服务管理和开发,本文第一步先介绍如何快速的配置Java开发工具,主要针对目前比较流行的Ecl ...

  9. android 遇到的细节 FAQ

    1.ListView 设置addHead 在3.0与之前版本若在:setAdapter之后添加,运行报错.4.0以后不报错 2.ListView  Adapter    getView函数忘记返回vi ...

  10. BCB6.0(Borland C++ Builder 6.0)下载位置(P2P)

    这个老东西还真不好找,搜索了一下,有一些所谓的精简版,绿色版,破解版,不靠谱. 公司有正版光盘,我装过,下面这两个应该是原版的: CD1: ed2k://|file|%5BBorland.C...Bu ...