Android WebView与JavaScript混合使用教程
2014-07-11 11:04
281 查看
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的传值过程。
由www.J2meGame.com精心收集。
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的传值过程。
由www.J2meGame.com精心收集。
相关文章推荐
- Android混合开发教程之WebView的使用方法总结
- Android WebView中的JavaScript代码使用
- android在WebView中使用JavaScript
- 使用webView中的javaScript调用Android方法
- Android中Webview使用javascript调用事先定义好的Java函数
- Android在使用WebView时,通过Javascript调用JAVA函数
- Android WebView中的JavaScript代码使用
- Android webview app 直接使用注入 javascript 解决中文输入问题
- 使用WebView中的JavaScript调用android的方法
- android webview中使用Java调用JavaScript方法并获取返回值
- Android WebView中的JavaScript代码使用
- Android WebView中的JavaScript代码使用
- Android中Webview使用自定义的javascript进行回调
- Android WebView中的JavaScript代码使用
- 基于Android中Webview使用自定义的javascript进行回调的问题详解
- android教程使用webview访问https的url处理sslerror示例
- Android中Webview使用自定义的javascript进行回调
- 【Android】不使用WebView来执行Javascript脚本(Rhino)
- Android中WebView的使用总结及Java与Javascript的相互调用
- Android WebView使用之JavaScript调用Java代码注意事项