android调用js方法比较简单,一行代码搞定。
mWebView.loadUrl("javascript:test('" + aa+ "')")//test就是你js方法,然后是参数然后是js调用android方法,比较复杂。
<a onclick="window.wst.test2(2)">b.c</a>这个window.wst的wst就是Android中自己定义的标识名称,clickOnAndroid方法就是安卓中自定义的方法名。
mWebView.addJavascriptInterface(new MyTest(), "wst")//给android添加一个js接口,标识名称wst//这里的代码是个类部类
private final class MyTest{
@JavascriptInterface
public void clickOnAndroid(int number) {
MyActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i("number",number)//这里所有代码必须写到主线程中,否则报错。
}
})
}
}
这样就能实现js调用android。
两个方法最重要的都是要启用webview的js功能。
// 启用javascript
mWebView.getSettings().setJavaScriptEnabled(true)哪里不懂可以继续追问我
问的问题本身就是错误的,没有所谓的js与java交互,只有浏览器与服务器交互,无论是传统页面跳转还是ajax都是浏览器与服务器交互。js可以被其它浏览器脚本语言替代,java也可以被其它服务器语言替代。作为语言本身,并不与另外语言有所交集。本质上都是http请求,一个请求分为请求行、请求头、和请求体
可以,只要你是用webview打开的,那么不管事远程还是本地,都可以通过webview与app的本地java代码进行交互。没有任何区别。1、webview必须设置支持Javascript
mWebview.getSettings().setJavaScriptEnabled(true)
2、加进一个回调的代理类JavaScriptInterface,并给它一个调用的名称:ncp
mWebView.addJavascriptInterface(new JavaScriptInterface(), "ncp")
final class JavaScriptInterface {
public int callOnJs() {
return 1000
}
public void callOnJs2(String mode) {
//TODO
}
}
3、JS页面
<script type="text/javascript">
window.onload = function(){
document.getElementById('btn_1').addEventListener('click', onBtnClick, false)
var _int_value = window.ncp.callOnJs()
alert("get int from java:" + _int_value )
}
function onBtnClick() {
window.ncp.callOnJs2("click")
}
</script>
接下来就可以调用js方法了,
1、Java调用js方法
mWebView.loadUrl("javascript:onSaveCallback()")
2、JS访问java方法
window.ncp.callOnJs2("click")