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 ...
随机推荐
- [原创]Windows下Google V8 javascript引擎编译
项目用到将v8嵌入到C++的情况,公司没时间研究,只有在家研究,编译过程一堆坑.记录一下. 网上百度的都是基于vs2010,或者早版本的v8编译,最新版本应该使用vs2013\vs2015.本文介绍的 ...
- inflate, findViewById与setContentView的区别与联系
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...
- 程序A+B问题(一次输入和多次输入)
这是早就会写的题,把它整理一下,比较容易. ➀一次输入数据,计算A+B #include<stdio.h> #include<stdlib.h> int main() { ...
- FormSheet式模态视图,点击模态视图外隐藏模态视图的方法
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Mfgtool
For bootstrap mode, it refers to the communcation between the host and ROM codes through serial down ...
- MYSQL create database 和 create table 做了一些什么!
create database Studio; 这样就可以创建一个数据库了.他包涵一些什么呢? 可以看到它创建了一个文件夹,下面我们进去看一下它里面有一些什么东西. 还是先建一张表再进去吧,运行一下这 ...
- SQL Server 查看当前活动的锁
第一步: 要查看活动中的锁,如果日前根本就没有活动中的锁怎么办,还好我会自己做一把. begin tran select * from dbo.Nums with(ta ...
- 使用Java管理Azure(1):基础配置
Azure针对Java开发人员提供了非常丰富的开发库,开发工具,和相关插件,让你通过Java对Azure进行服务管理和开发,本文第一步先介绍如何快速的配置Java开发工具,主要针对目前比较流行的Ecl ...
- android 遇到的细节 FAQ
1.ListView 设置addHead 在3.0与之前版本若在:setAdapter之后添加,运行报错.4.0以后不报错 2.ListView Adapter getView函数忘记返回vi ...
- BCB6.0(Borland C++ Builder 6.0)下载位置(P2P)
这个老东西还真不好找,搜索了一下,有一些所谓的精简版,绿色版,破解版,不靠谱. 公司有正版光盘,我装过,下面这两个应该是原版的: CD1: ed2k://|file|%5BBorland.C...Bu ...