}
3.5 Android中WebView跟JAVASCRIPT中的交互
在android 的应用程序中,可以直接调用WebView 中的javascript 代码,而WebView 中的javascript 代码,也可
以去调用ANDROID 应用程序(也就是JAVA 部分的代码).下面举例说明之:
1、JAVASCRIPT 脚本调用android 程序
要在WebView 中,调用addJavascriptInterface(OBJ,interfacename)
其中,obj 为和javascript 通信的应用程序,interfacename 为提供给JAVASCRIPT 调用的名称,设置如下:
WebView WebView = new WebView(this);
WebView.getSettings().setJavaScriptEnabled(true);
WebView.loadUrl(getIntent().getCharSequenceExtra("url").toString());
//设定JavaScript 脚本代码的界面名称是”android”
WebView.addJavascriptInterface(this, "android");
其中WebView 调用的HTML 页中,JS 如下:
<script type="text/javascript">
function ok() {
android.js(document.forms[0].elements[0].value, document.forms[0].elements[1].value);
}
而这个android.js 在哪呢?那是在应用程序中的
//JavaScript 脚本代码可以调用的函数js()处理
public void js(String action, String uri) {
...../
}
这个JS 中就是处理JAVASCRIPT 发送过来的请求了.
2、下面的例子,当WebView 网页中输入后,点提交按钮,会跟ANDROID 的应用程序进行交互
WebView WebView = new WebView(this);
WebView.getSettings().setJavaScriptEnabled(true);
WebView.setWebChromeClient(new MyWebChromeClient());
WebView.loadUrl(getIntent().getCharSequenceExtra("url").toString());
//onJsAlert()函数接收到来自HTML 网页的alert()警告信息
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
if (message.length() != 0) {
AlertDialog.Builder builder = new AlertDialog.Builder(JExample02.this);
builder.setTitle("From JavaScript").setMessage(message).show();
result.cancel();
return true;
}
return false;
}
而HTML 页中的JS 事件为:
<input type="button" value="alert" οnclick="alert(document.forms[0].elements[0].value)">
特别提示下, 在自定义的MyWebChromeClient()) 中, 除了可以重写onJSAlert 外, 还可以重写
onJsPrompt,onJsConfirm 等,可以参考.
http://618119.com/archives/2010/12/20/199.html
3、下面这个例子,先显示第一张图片,点一点后,再显示第2 张图片
HTML JS 中:
<script language="javascript">
function changeImage02() {
document.getElementById("image").src="navy02.jpg";
}
function changeImage01() {
document.getElementById("image").src="navy01.jpg";
}
</script>
</head>
<body>
<a onClick="window.demo.onClick()">
<img id="image" src="navy01.jpg"/></a>
</body>
当点<a onClick="window.demo.onClick()">后,调用ANDROID 应用程序中的处理部分,看程序:
WebView.addJavascriptInterface(new JSInterface(),"demo");
public final class JSInterface {
//JavaScript 脚本代码可以调用的函数onClick()处理
public void onClick() {
handler.post(new Runnable() {
public void run() {
if (flag == 0) {
flag = 1;
WebView.loadUrl("javascript:changeImage02()");
} else {
flag = 0;
WebView.loadUrl("javascript:changeImage01()");
}
}
});
}
}
可以看到,ANDROID 中,通过WebView.loadUrl 去调用HTML 页面中的JS
3.6 Android的WebView与ProgressDialog结合
WebView 组件支持直接加载网页,可以将其视为一个浏览器,要实现该功能,具体步骤如下:
WebView.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView android:id="@+id/WebView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
WebViewActivity.java
public class WebViewActivity extends Activity{
private WebView WebView;
private AlertDialog alertDialog;
private ProgressDialog progressBar;
jQuery datatables 使用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.WebView);
//加载WebView
initWebView();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && WebView.canGoBack()){
WebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
class MyWebViewClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
if(progressBar.isShowing()){
progressBar.dismiss();
}
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
Toast.makeText(WebViewActivity.this, "网页加载出错!", Toast.LENGTH_LONG);
alertDialog.setTitle("ERROR");
alertDialog.setMessage(description);
alertDialog.setButton("OK", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
alertDialog.show();
}
}
protected void initWebView(){
//设计进度条
progressBar = ProgressDialog.show(WebViewActivity.this, null, "正在进入网页,请稍后…");
//获得WebView 组件
WebView = (WebView) this.findViewById(R.id.WebView);
WebView.getSettings().setJavaScriptEnabled(true);
WebView.loadUrl("http://www.baidu.com");
alertDialog = new AlertDialog.Builder(this).create();
//设置视图客户端
WebView.setWebViewClient(new MyWebViewClient());
}
}
最后,需要在**Manifest.xml 中添加访问互联网的权限,否则不能显示:
<uses-permission android:name="android.permission.INTERNET"/>
3.7 WebView处理404错误
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebView_404 extends Activity {
private final String HOMEPAGE = "http://10.0.0.95/index.html";//请求的网站的主页
private WebView web;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what==404) {//主页不存在
//载入本地assets 文件夹下面的错误提示页面404.html
web.loadUrl("file:///android_asset/404.html");
} else {
web.loadUrl(HOMEPAGE);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.WebView_404);
web = (WebView) findViewById(R.id.WebView01);
web.getSettings().setJavaScriptEnabled(true);
web.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.startsWith("http://") && getRespStatus(url)==404) {
view.stopLoading();
//载入本地assets 文件夹下面的错误提示页面404.html
view.loadUrl("file:///android_asset/404.html");
} else {
view.loadUrl(url);
}
return true;
}
});
new Thread(new Runnable() {
@Override
public void run() {
Message msg = new Message();
//此处判断主页是否存在,因为主页是通过loadUrl 加载的,
//此时不会执行shouldOverrideUrlLoading 进行页面是否存在的判断
//进入主页后,点主页里面的链接,链接到其他页面就一定会执行shouldOverrideUrlLoading 方法了
if(getRespStatus(HOMEPAGE)==404) {
msg.what = 404;
}
handler.sendMessage(msg);
}
}).start();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK && web.canGoBack()) {
web.goBack();
return false;
}
return super.onKeyDown(keyCode, event);
}
private int getRespStatus(String url) {
int status = -1;
try {
HttpHead head = new HttpHead(url);
HttpClient client = new DefaultHttpClient();
HttpResponse resp = client.execute(head);
status = resp.getStatusLine().getStatusCode();
} catch (IOException e) {}
return status;
}
}
四、Android WebView CookBook
这里收集一些很实用的小技巧~
4.1 Android WebView 中点击打开默认的浏览器
论坛帖子:http://www.eoeandroid.com/thread-174926-1-1.html
---------------------------------------------------------------------------------------------------
我遇到一个简单的问题,我在WebView 中加载了一个外部的url ,现在需要的是在页面加载后,
用户点击里面的连接能像默认的浏览器一样在我的WebView 中打开连接,但问题是现在它会打开android 的默
认浏览器去加载页面???我已经启用了javascript ,但是没用,是否我忘记了什么?
一楼:
如果你不想要开android 默认的浏览器,那么我就得自己去截取在你WebView 中的点击事件.
你可以通过WebView 的WebViewClient 来监控事件.你现在需要的是shouldOverrideUrlLoading()这个方法,它
会允许在一个特定的url 被选中的时候来执行你自己的一个动作.
在sdk 的samples 中有一个示例.代码如下:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
二楼:
在某些情况下,你或许也要生写onLoadResource.比如说重定向时,因为它不会触发你的加载方法.我这种情况
下,我尝试如下:
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}
4.2 追加一个图片到Android WebView
我正在尝试用javascript 来向WebView 中追加一个图片.我自己写的html,并且包含了自己方法.
代码如下:
<script type="text/javascript">
function image(src) {
var img = document.createElement("IMG");
img.src = src;
document.getElementById('image').appendChild(img);
}
</script>
但是我发现我不能通过myview.loadurl(javascript:image('line1.png'));来实现.所以我想试试别的方法.比如说
能不能通过loadurl()方法来实现,但是会报错.不过我也听说可以使用addJavascriptInterface 来实现,但是好像比较
复杂,但是也不确定行不行.不知道你们有没有好的解决办法?
解决办法:
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.WebView;
public class StackOverFlowActivity extends Activity {
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView view=(WebView)findViewById(R.id.WebView1);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/index.html");
view.addJavascriptInterface(new MyJavaScriptInterface(), "Android");
}
final class MyJavaScriptInterface
{
public void ProcessJavaScript(final String scriptname, final String args)
{
mHandler.post(new Runnable()
{
public void run()
{
String url="file:///android_asset/img.jpg";
WebView.loadUrl("javascript:image(\""+url+"\")");
}
});
}
}
}
index.html:
<script type="text/javascript">
function getimage()
{
Android.ProcessJavaScript("image",null);
}
function image(src) {
var img = document.createElement("IMG");
img.src = src;
document.getElementById('image').appendChild(img);
}
</script>
and add the following,
<body οnlοad="getimage()" >
4.3 WebView中关于字符串编码问题
我从web service 中获取到的响应如下:
<html><head>
<style type="text/css">
body{
color: #FFFFFF;
background-color: #000000;
}
</style>
</head>
<body><center><div>
Ricardo Viana Vargas ?
09-14 Ricardo Viana Vargas é especialista em gerenciamento de projetos, portfólio e riscos. Foi, nos últimos 15
anos, responsável por mais de 80 projetos de grande porte em diversos países, nas áreas de petróleo, energia,
infraestrutura, telecomunica??es, informática e finan?as, com um portfólio de investimentos gerenciado superior a 18
bilh?es de dólares. Foi o primeiro voluntário latino-americano a ser eleito para exercer a fun??o de presidente do
conselho diretor (Chairman) do Project Management Institute (PMI), maior organiza??o do mundo voltada para a
administra??o de projetos, com cerca de 500 mil membros e profissionais certificados em 175 países. Ricardo Vargas
escreveu dez livros sobre gerenciamento de projetos, publicados em português e inglês, com mais de 240 mil
exemplares vendidos mundialmente. Recebeu em 2005 o prêmio PMI Distinguished Award pela sua contribui??o..
(PRMIA).
</div> </center>
</body>
</html>
怎么才能让WebView 显示出正确的字符串呢?我在WebView 中的代码如下:
System.out.println("strContent is :: " + strContent);
WebView wv = (WebView) findViewById(R.id.WebView_portugage);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv.loadData(strContent, "text/html", "UTF-8");
1 楼:
(1)用WebView.loadDataWithBaseURL,它的行为与WebView.loadData 不同(应该说是更好)
(2)试试把UTF-8 替换成其它的编码,如US-ASCII.最好是确认你显示的字符中用的什么编码.
用户回馈:
1,用第一种办法,是可以行.
2. 我用了wv.loadData(object1.getString("post_content").toString(), "text/html", "US-ASCII");, 还是一样的问
题.(此方法无效)
2 楼:
我是在WebView.loadData 中设置MIME-type 为"text/html; charset=utf-8"来解决的.
这种方法并不是对所有的设备都是有效的, 猜测可能与浏览器的内核版本(webkit) 有关. 但是
loadDataWithBaseURL 在所有的设备(已测试)都是有效的.
4.4 Android的WebView研究
最近做的项目大量用到了WebView ,用网页来布局. Android 的WebView 是基于webkit 内核,不过他的运
行效果和firefox 上一模一样,所以写的时候都是先用firefox 测试,测试OK 了再放到程序里面看效果,基本上
不会有什么问题.其实android 的WebView 跟iphone 的WebView 差不多, iphone 上的WebView 比android
上的强大多了.
谈一下研究WebView 的一些成果:
1、加载资源的速度不慢,但是资源多了,就很慢.图片、css 、js 、html 这些资源每个大概需要10-200ms ,
一般都是30ms 就ok 了.如果一个页面上的资源很多,就很浪费时间.
2、Js 和css 的执行速度.开始的时候,我的页面都是用js 生成DOM ,添加样式等也用js 添加.后来发现,
加载一个页面居然要5-6 秒.然后我就怀疑是不是js 的执行效率不高,然后就把能用css 的地方都用css ,能直
接写到html 上的就不用js 动态生成.结果,速度并没有多大的提升,最多提升了1 秒.看来, Js 的执行速度虽然
比不上css ,但是还不至于慢到那种程度.那会是什么原因使得页面加载速度这么慢?经过仔细的排查,最终发现,
是因为我用了jQuery 框架.
WebView 加载页面的顺序是这样的:先加载html ,然后从里面解析出css 、js 文件和页面上写死的图片
资源进行加载,如果webkit 的缓存里面有,就不加载.加载完这些资源之后,就进行css 的渲染和js 的执行. Css
的渲染一般不需要很长时间,几十毫秒就ok .关键是js 的执行,如果用了jQuery ,则执行起来需要5-6 秒.而在
这段时间,如果不在WebView 里设置背景,网页部分是白色的,很难看.这是一个很糟糕的用户体验.所以如果用
网页布局程序,最好别用很大的js 框架.
3、网页和Java 之间的互调.这个功能是iphone 里面就有的,网上也有很多资料,可以告诉我们怎么做,这些
都是很简单、很基本的.我研究了一段时间,总结一下:
①Java 调用js 里面的函数,速度并不令人满意,大概一次一两百毫秒吧,如果要做交互性很强的事情,这种速
度会让人疯掉的.而反过来就不一样了, js 去调java 的方法,速度很快,基本上40-50 毫秒一次.所以尽量用js
调用java 方法,而不是java 去调用js 函数.
②Java 调用js 的函数,没有返回值,而Js 调用java 方法,可以有返回值.返回值可以是字符串,也可以是对
象.如果是字符串,有个很讨厌的问题,第3 点我会讲的.如果是对象,这个对象会被转换为js 的对象,直接可以访
问里面的方法.但是我不推荐java 返回给js 的是对象,除非是必须.因为js 收到java 返回的对象,会产生一些
交换对象,而如果这些对象的数量增加到了500 或600 以上,程序就会出问题.所以尽量返回基本数据类型或者
字符串.
③Js 调用java 的方法,返回值如果是字符串,你会发现这个字符串是native 的,不能对它进行一些修改操
作,比如想对它substr ,取不到.怎么解决呢?转成locale 的.使用toLocaleString() 函数就可以了.不过这个函数
的速度并不快,转化的字符串如果很多,将会很耗费时间.
4、网页上拖动元素.网页上有一个div ,想要拖动它到另外一个地方,怎么做?如果用PC 上的网页做法,监听
onmousedown 、onmousemove 和onmouseup 就可以了.但是在手机上,事件模型就不一样了.在网页上点击,
拖动,然后释放,手离开屏幕的时候, WebView 才会触发onmousedown 、onmousemove 、onmouseup 事件.
所以,要想拖动,不能这么做.这个问题困扰我很长时间,后来发现iphone 上的做法,才解决了. Iphone 上的
WebView 有专为触摸屏设计的事件ontouchstart 、ontouchmove 、ontouchend ,这几个事件的响应是实时的,
就能解决拖动的问题了.
5、一些小问题. WebView 里面的网页,如果有input ,需要输入,但是点上去却没反应,输入法不出来.这种情况
是因为WebView 没有获取焦点.需要在java 里面给WebView 设置一下requestFocus() 就行了.
6、Android 上的WebView 和iphone 的WebView 区别.目前为止,我发现的区别有这么几个:
①Android 上, WebView 不支持多点触控,没有ongesture 系列事件,而iphone 上有.
②Android 上的WebView 不支持透明, iphone 上可以
4.5 Android WebView 总结
1、添加权限:AndroidManifest.xml 中必须使用许可"android.permission.INTERNET",否则会出Web page not
available 错误.
2、在要Activity 中生成一个WebView 组件:WebView WebView = new WebView(this);
3、设置WebView 基本信息:
如果访问的页面中有Javascript,则WebView 必须设置支持Javascript.
WebView.getSettings().setJavaScriptEnabled(true);
触摸焦点起作用
r equestFocus();
取消滚动条
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4、设置WevView 要显示的网页:
互联网用:WebView.loadUrl("http://www.google.com");
本地文件用:WebView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
5、如果希望点击链接由自己处理,而不是新开Android 的系统browser 中响应该链接.
给WebView 添加一个事件监听对象(WebViewClient)
并重写其中的一些方法
shouldOverrideUrlLoading:对网页中超链接按钮的响应.
当按下某个连接时WebViewClient 会调用这个方法,并传递参数:按下的url
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest
6、如果用WebView 点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()
而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity 中处理并消费掉该Back 事件.
覆盖Activity 类的onKeyDown(int keyCoder,KeyEvent event)方法.
public boolean onKeyDown(int keyCoder,KeyEvent event){
if(WebView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){
WebView.goBack(); //goBack()表示返回WebView 的上一页面
return true;
}
return false;
}
4.6 Android获取服务器中的session问题
1、Android 中的WebView 如何获取服务器页面的jsessionid 的值
2、Android 的WebView 又是如何把得到的jsessionid 的值在set 到服务器中,一致达到他们在同一个jsessionid
的回话中.
解决如下:
CookieManager cm = CookieManager.getInstance();
cm.removeAllCookie();
cm.getCookie(url);
cm.setCookie(url, cookie);
另外还有个CookieSyncManager,没搞清干嘛使的,但是我按以下顺序调用,设置Cookie 没问题
CookieSyncManager csm = CookieSyncManager.createInstance(this);
CookieManager cm = CookieManager.getInstance();
cm.removeAllCookie();
csm.sync();
cm.setCookie(url, cookie);
4.7 WebView 设置实现两个手指缩放网页
mWebView.getSettings().setSupportZoom(true);
mWebView.getSettings().setBuiltInZoomControls(true);
代码是这样,但是首先是你的硬件支持多点触控
4.8 WebView cookies清理
在使用新浪微博账户登录应用时,WebView 会自动登录上次的微博帐号!(因为WebView 记录了微博帐号和
密码的cookies)
所以,需要清除SessionCookie:
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().removeSessionCookie();
另外,清理cache 和历史记录的方法:
WebView.clearCache(true);
WebView.clearHistory();
4.9 Android WebView使用cmwap无法联网解决办法
1、某些Rom 在wifi 环境下取代理依然会取到cmwap 设置的代理值,所以取代理时判断一下手机网络环境,
如果是gprs 上网,则不取代理.
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
if (activeNetworkInfo != null) {
int type = activeNetworkInfo.getType();
// TODO 防止wifi 下读取移动的代理
if (type == ConnectivityManager.TYPE_MOBILE) {
//取代理
}else{
//不取代理
}
}
2. 某些rom 的webkit 在cmwap 下,webkit 连接不上或是时断时连,需要在onResume()添加
WebView.enablePlatformNotifications();,onStop 添加WebView.disablePlatformNotifications();.但是此时如果你需要
刚进入这个activity 就load 页面,第一次进入时load 的第一个页面是load 不出来的,会停留很久并且不出错误页
面,不调用WebViewClient.onReceivedError.个人试过setHttpAuthUsernamePassword 也不好使.
个人解决方案:
mWebPage.post(new Runnable(){
@Override
public void run() {
mWebPage.loadUrl(url);
}
});
此时第一此load 页面会很快调用WebViewClient.onReceivedError,你再在WebViewClient.onReceivedError 里
面设置标志,重新载入第一个页面即可.
4.10 Android判断WebView是否已经滚动到页面底端
getScrollY()方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.
getHeight()或者getBottom()方法都返回当前WebView 这个容器的高度
getContentHeight 返回的是整个html 的高度,但并不等同于当前整个页面的高度,因为WebView 有缩放功能,
所以当前整个页面的高度实际上应该是原始html 的高度再乘上缩放比例.
因此,更正后的结果,准确的判断方法应该是:
if(WebView.getContentHeight*WebView.getScale() -(webvi ew.getHeight()+WebView.getScrollY())){
//已经处于底端
}
4.11 Android中WebView实现Javascript调用Java类方法
为了方便网页和Android 应用的交互,Android 系统提供了WebView 中JavaScript 网页脚本调用Java 类方法
的机制.只要调用addJavascriptInterface 方法即可映射一个Java 对象到JavaScript 对象上.
1、映射Java 对象到JavaScript 对象上
mWebView = (WebView) findViewById(R.id.wv_content);
mWebView.setVerticalScrollbarOverlay(true);
final WebSettings settings = mWebView.getSettings();
settings.setSupportZoom(true);
//WebView 启用Javascript 脚本执行
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
//映射Java 对象到一个名为”js2java“的Javascript 对象上
//JavaScript 中可以通过"window.js2java"来调用Java 对象的方法
mWebView.addJavascriptInterface(new JSInvokeClass(), "HTMLOUT");
2、JavaScript 调用Java 对象示例
这里才是最关键的地方所在了,下面是通过javascript 来调用java 中的方法,也就是JSInvokeClass 中的back 方
法window.HTMLOUT.back();
但是上面的方法放在哪里呢?如何去执行喃?请看:
mWebView.loadUrl("javascript:window.HTMLOUT.back();");
当然如果想传参数怎么办?不要急,首先在JSInvokeClass.back 方法处,申明一个代参数的方法就行了:
/**网页Javascript 调用接口**/
class JSInvokeClass {
public void back() {
activity.finish();
}
public void showHtml(String html)
{
Log.e("Html:"+html);
}
}
然后通过javascript 调用就行了.
mWebView.loadUrl("javascript:window.HTMLOUT.showHtml(document.documentElement.innerHTML);");
更多技巧,请访问这里:
http://search.eoeandroid.com/f/search?q=WebView&sId=7379687&ts=1335235840&mySign=4f90227f&menu=1&rfh
=1&qs=txt.form.a