Android Webview与Html5交互
转: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可以做下载方面的处理,自己在项目中没有使用到,这里就不做解释了。
//分享相关的内容
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交互的更多相关文章
- [android] WebView与Js交互
获取WebView对象 调用WebView对象的getSettings()方法,获取WebSettings对象 调用WebSettings对象的setJavaScriptEnabled()方法,设置j ...
- Android Webview 与JS交互
Android中 WebView控件支持JS与本地代码的交互. // 是否允许在webview中执行javascript webSettings.setJavaScriptEnabled(true); ...
- Android WebView与JavaScript交互操作(Demo)
应用场景: 为了使Android移动项目能够在较短的时间内完成开发,同时降低技术人员开发的成本投入,往往会采用Hybrid APP的开发模式.相关Hybrid APP(混合型应用)参看:http:// ...
- Android WebView和JavaScript交互
JavaScript在现在的网页设计中用得很多,Android 的WebView可以载入网页,WebView也设计了与JavaScript通信的桥梁.这篇主要介绍一下WebViewk控件如何和Java ...
- Android Webview 和Javascript交互,实现Android和JavaScript相互调用
在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好 ...
- Android WebView与JavaScript交互实现Web App
当我们去开发一个基于web的android app时,我们第一须要处理的就是与JavaScript的交互问题.Android须要做的事情就是开放某些特定的接口供web里的JavaScript调用,能够 ...
- android webview开启html5支持
最近做的一个小项目需要用到webview.虽然只是一个简单的网页,但是由于以前用的都只是显示本地文件,没有显示网页文件.现在需要显示网页文件,发现许多网站的webapp做的挺不错的,无论是显示还是用户 ...
- JsBridge & Android WebView
JsBridge & Android WebView webview loadUrl addJavascriptInterface .setJavaScriptEnabled(true); f ...
- Android与html5交互 -- WebView使用(一)
Android中使用WebView可加载html5,具体步骤如下: (前提:本地Html5存放到assets文件夹下) 一:使用WebView加载Html5,简单显示 1:清单文件中添加访问权限:an ...
随机推荐
- SQLServer服务器数据库之间的数据操作(完整版)
分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ...
- WindowsForm 流
流 包括输入流代码 输出流代码 流: 输入流: string filename = openFileDialog1.FileName; //通过读入流进行文件读取 StreamReader sr = ...
- HDU 3306 - Another kind of Fibonacci
给你 A(0) = 1 , A(1) = 1 , A(N) = X * A(N - 1) + Y * A(N - 2) (N >= 2). 求 S(N) = A(0) 2 +A(1) 2+……+ ...
- ng事件中为变量的参数
之前学习Angular时碰到过这种问题,绑定事件中传参为变量的问题. 举个例子吧,比如有这么一段代码: <button type='button' ng-click="showMsg( ...
- Android的Drawable
1.获取Drawable的内部宽\高:getIntrinsicHeight/Width.但是并不是所有Drawable都有内部宽高(比如说一个颜色形成的宽高,Drawable的宽高不等于大小,大小是根 ...
- 自定义View 一 (继承VIew重写onDraw方法)
项目:具有圆形效果的自定义View 一.继承View并重写onDraw方法 public class CircleView extends View{ private static final int ...
- cocos2d-x中的Box2D物理引擎
在Cocos2d-x中集成了2个物理引擎,一个是Chipmunk,一个是Box2D.前者是用C语言编写的,文档和例子相对较少:Box2D是用C++写的,并且有比较完善的文档和资料.所以在需要使用物理引 ...
- Dragon Balls--hdu3635(并查集)
Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- centos 安装amp 运行环境+配置虚拟地址
一.安装 MySQL 首先来进行 MySQL 的安装.打开超级终端,输入: [root@localhost ~]# yum install mysql mysql-server 安装完毕,让 MySQ ...
- 厂商自定义USB设备固件程序及特性
通过前面的学习,大家应该对USB固件程序结构有了比较深的认识,现在再来详细说说固件里决定设备识别成厂商自定义USB设备的地方有哪些,或者说厂商自定义USB设备的固件特性有哪些. 之前不止一次说过学习U ...