android中WebView和javascript实现数据交互实例
在看懂这篇文章之前首先要有javascript基础。
(1) js调用android的方法:
wview. addjavascriptinterface (object obj, string interfacename);
是实例化一个对象,在html的js中调用,第二个参数是实例化对象的别名,如果要使用这个obj,则在js中使用的名字
就是interfacename。
webview wview;
/** called when the activity is first created. */
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
wview = (webview)findviewbyid(r.id.wv1);
websettings wset = wview.getsettings();
wset.setjavascriptenabled(true);
proxybridge pbridge = new proxybridge();
wview.addjavascriptinterface(pbridge, "aliansbridge");
wview.loadurl("file:///android_asset/index.html");
}
private class proxybridge {
public int one () {
return 1;
}
}
}
来看一下index.html的内容:
<html>
<mce:script language="javascript"><!--
/* this function is invoked by the activity */
function wave() {
alert("1");
document.getelementbyid("droid").src="android_waving.png";
alert("2");
}
// --></mce:script>
<body>
<div id="output">test page.</div>
<a onclick="window.demo.clickonandroid()">
<div style="width:100px;
margin:0px auto;
padding:10px;
text-align:center;
border:2px solid #202020;" >
<img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>
click me!
</div>
</a>
<input type="submit" value="change to 1" onclick="document.getelementbyid('output').innerhtml
=aliansbridge.one()" />
</body>
</html>
这里的aliansbridge即是调用的java对象。
要注意的是,如果你只有一个方法需要被js调用只new一个对象就行:
proxybridge pbridge = new proxybridge();
wview.addjavascriptinterface(pbridge, "aliansbridge");
如果你需要调用好多个方法,就要把整个android程序所在的类本身实例化传递进去:
wview.addjavascriptinterface(this, "aliansbridge");
(2) android调用js的方法:wview.setwebchromeclient (webchromeclient client)
要用到handler更新ui,handler mhandler = new handler();
mwebview.addjavascriptinterface(new object(){
/**
* this is not called on the ui thread. post a runnable to invoke
* loadurl on the ui thread.
*/
public void clickonandroid() {
mhandler.post(new runnable() {
public void run() {
mwebview.loadurl("javascript:wave()");
}
});
}
}, "demo");
同理,在html中必须有一个名为demo的对象调用clickonandroid()方法。
* provides a hook for calling "alert" from javascript. useful for
* debugging your javascript.
*/
final class mywebchromeclient extends webchromeclient {
@override
public boolean onjsalert(webview view, string url, string message,
jsresult result) {
result.confirm();
return super.onjsalert(view, url, message, result);
}
}
推荐阅读
-
Android编程使用WebView实现与Javascript交互的方法【相互调用参数、传值】
-
解析Android中webview和js之间的交互
-
Android中webview与JS交互、互调方法实例详解
-
android中webview控件和javascript交互实例
-
android中WebView和javascript实现数据交互实例
-
Unity3D游戏引擎实现在Android中打开WebView的实例
-
解析Android中webview和js之间的交互
-
Android中webview与JS交互、互调方法实例详解
-
Android中Java和JavaScript交互实例
-
Android中在WebView里实现Javascript调用Java类的方法