Android中提供的WebView的功能不可谓不强大,并且WebView对于Javascript也能够很好的支持,Google官网也提供了在WebView中如何实现的Java和JavaScript的互相访问。来看一下源代码:
1 WebViewDemo.java文件:
public class WebViewDemo extends Activity {
private WebView mWebView;
private Handler mHandler = new Handler();
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.webviewdemo);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:wave()");
}
});
}
}, "demo");
mWebView.loadUrl("file:///android_asset/demo.html");
}
}
来分析一下这段代码:
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
首先生成一个WebSettings对象,其次setJavaScriptEnabled(true);通过这句声明使WebView能够支持JavaScript脚本。
紧接着mWebView.addJavascriptInterface这句,这个方法的原型如下:
addJavascriptInterface(Object
obj,String interfaceName),该方法将一个java对象绑定到一个javascript对象中,而这个javascript对象的名字就是第二个参数interfaceName。这样在WebView进行初始化以后,就可以通过window. interfaceName来访问Java对象了。这里的interfaceName就是Demo。
第一个参数则是个初始化了一个Java的类,注意这里的clickOnAndroid()方法,
这里文档里是这样描述的The Java object that is bound runs in another thread and
not in the thread that it was constructed in.
也就是说addJavascriptInterface这里要绑定的类新申请了个进程来处理,这个是需要注意的地方,因此这也是使用了Handler的目的。
mWebView.loadUrl("file:///android_asset/demo.html");这句话是加载了本地的demo.html页面,这个页面是存放在工程的assets下的,为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的assets目录中找内容。如上面的“file:///android_asset/demo.html”
mWebView.loadUrl("javascript:wave()");这句话就是Java调用Javascript的函数了。这个wave()是在页面中的Javascript脚本中定义的。
下面再来看看在demo.html中是怎样调用的Java函数的,下面是demo.html的代码
<html>
<script language="javascript">
function wave() {
document.getElementById("droid").src="android_waving.png";
}
</script>
<body>
<a onClick="window.demo.clickOnAndroid()">
<img id="droid" src="android_normal.png"/><br>
Click me!
</a>
</body>
</html>
其中wave() 是被Java程序调用的。<a
onClick="window.demo.clickOnAndroid()">通过点击来调用window.demo.clickOnAndroid()函数,这样就调用了Java的clickOnAndroid()方法。
这样,通过上面的例子可以看出,实现Java和Javascript之间的交互是比较容易的,下面再来看看如何实现Java和Javascript的传值。
基本上传值的主要思路就是通过函数的参数来进行的,把上面例子进行了修改,将函数加了参数,看修改后如下:
public void clickOnAndroid(final
String str)在这个函数添加了一个String的参数,在HTML里的调用改为如下即可:
window.demo.clickOnAndroid(str)
其中参数str可以在调用以前设置好var
str = 1234567890,任意一个值或者是你自己需要得到的页面中的某一个值。这样就实现了JavaScript向Java传值。
那么Java向JavaScript传值也是采用的函数参数的方式,看一下HTML中的改动:
function wave(str)
在Java中也需要做些改动,
mWebView.loadUrl("javascript:wave(‘"+str+"’)");
中间的str是String类型,将需要传给JavaScript的值放入其中。这样就实现了Java向JavaScript的传值过程。
分享到:
相关推荐
总结,Android与H5的交互是移动开发中的常见需求,通过合理的数据传递机制,我们可以实现两者之间的深度融合,为用户提供更丰富的功能和体验。在实践过程中,注意安全性和性能优化,确保应用的稳定性和用户数据的...
`WebView`不仅可以展示HTML页面,还能实现Android原生Java代码与HTML中的JavaScript交互,从而实现更丰富的功能。本教程将详细介绍如何在Android中通过Java语句与HTML中的JavaScript进行互调,并传递参数。 首先,...
本资料包“安卓浏览器WebViewJSHTML5相关-android嵌套HTML的程序相互间传值.rar”主要涉及了如何在Android应用中使用`WebView`,以及如何实现Android应用与嵌入的HTML内容之间的数据交互。 首先,我们来看`WebView`...
6. **交互与更新**:由于Echarts是基于JavaScript的,你可以在Android Java代码中调用JavaScript函数来更新图表数据,通过`WebView`的`evaluateJavascript`方法: ```java webView.evaluateJavascript("javascript:...
本文将深入探讨Android与H5之间的参数传递,包括H5调用Android的方法以及Android调用JavaScript的方法。 首先,让我们关注H5调用Android的方法。Android提供了WebView组件,它允许在应用程序中嵌入一个浏览器内核,...
在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中嵌入网页内容,并且可以实现Android Java代码与网页中的JavaScript之间的交互。这种交互功能使得开发者能够结合原生应用的强大功能和Web页面...
在Android开发中,数据交换和序列化经常使用JSON(JavaScript Object Notation)格式,因为它的轻量级、易读易写以及广泛支持。本篇文章将详细介绍如何使用阿里巴巴的Fastjson库进行JSON操作,并封装成一个方便使用...
【标题】:“Android-Servlet-MySQL(json)登录传值”技术详解 在移动应用开发中,尤其是Android平台,用户登录功能是不可或缺的一部分。本技术专题将深入探讨如何在Android客户端通过Servlet与远程MySQL数据库交互...
7. **数据传输安全性**:由于JavaScript与Java之间的交互存在安全风险,如XSS攻击,因此应谨慎使用`addJavascriptInterface()`。对于敏感数据的传递,可以考虑使用其他机制,如POST请求或者自定义URL Scheme。 8. *...
3. **JavaScript与Java的桥梁**:在Cordova中,`CordovaWebView`作为JavaScript和Java之间的桥梁。通过`window.plugins`对象,你可以调用原生插件。每个插件都有一个JavaScript接口和一个或多个Java类,用于处理实际...
在Android应用开发中,混合开发(Hybrid Development)是指结合原生代码与Web技术来构建应用程序的方式。这种模式常用于创建具有丰富用户界面且需要快速迭代的项目。在这个场景中,我们关注的是如何在Android应用中...
这个项目涉及到了多个核心的技术领域,包括用户身份验证、数据存储、以及客户端与服务器之间的数据交互。 首先,我们来看看**登录注册**功能。在Android应用中,登录注册系统是必不可少的,它允许用户创建账户、...
在这个例子中,`CoolPlugin.js`是JavaScript接口,`CoolPlugin.java`是Android平台的原生代码。 接下来,我们来实现打印吐司的功能。在Android平台上,我们可以使用`Toast`类来显示短暂的通知消息。在`CoolPlugin....
在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中加载和展示网页内容。本文将深入探讨Android WebView的使用方法,包括如何打开指定网页、处理页面跳转、传递数据、支持JavaScript以及优化...
在处理URL参数时,可能会遇到一些特殊字符问题,比如本文提到的“URL的参数中有加号传值变为空格”的问题。这个问题源于URL编码的规则。 URL编码是一种将特殊字符转换为ASCII码的过程,以便于在网络传输中正确解析...
同时,对于JavaScript的编码操作技巧,你可以查阅相关的JavaScript专题文章,例如《JavaScript传值操作技巧总结》、《javascript编码操作技巧总结》等,这些资源能帮助你深入理解编码和解码的过程,提高编程效率。...
在IT行业中,开发Web应用程序时,常常需要处理数据的传输,而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其简洁、易读、易于解析的特点,被广泛应用于前后端交互。STRUTS作为Java Web开发...
1、ANDROID文件系统与应用程序架构 7 1.1、ANDROID 文件系统 7 1.2、ANDROID应用程序架构 9 2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 2.1.3、Activity 的创建 16 ...