根据文章android webview 加载本地文件搭建实现一个简单的webview应用
在oncreat方法里面添加几行代码:
webView.setWebChromeClient(new WebChromeClient(){
});
webView.setWebViewClient(new WebViewClient(){
});
webView.addJavascriptInterface(new MyJavascriptInterface(MainActivity.this,webView),"jsbrige");
关键在于最后一行代码:
最后一个参数jsbrige指的是JavaScript调用Java的时候方法名最前面的字符串
webView.addJavascriptInterface(new MyJavascriptInterface(MainActivity.this,webView),"jsbrige");
新写一个类,起名MyJavascriptInterface
里面的代码如下:
package webview.fanruitian.cn.webview;
import android.app.Activity;
import android.os.Handler;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;
/**
* Created by FRT on 2017/5/13.
*/
public class MyJavascriptInterface {
private Activity activity;
private WebView webView;
private Handler handler = new Handler(){};
MyJavascriptInterface(Activity activity,WebView webView) {
this.activity = activity;
this.webView = webView;
}
@JavascriptInterface
public void toast(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, msg, Toast.LENGTH_SHORT).show();
}
});
}
}
这里面实现一个功能,当JavaScript调用jsbrige.toast("hello")的时候回自动调用android自带的toast方法:
修改index.html源码
增加一个button,id是test_jsbrige
当点击这个button的时候自动执行方法:
$("#test_jsbrige").click(function(){
jsbrige.toast("hello");
});
测试:
JavaScript调用Java成功!
------------------------------------------------------------------------------------------------------------------------------------------------
下面Java调用JavaScript方法:
简单起见重写了按键方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK)
{
handler.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:callback('sadsaaadasdsad')");
}
});
return true;
}
return super.onKeyDown(keyCode, event);
}
当点击返回的时候先起了一个线程线程里面执行JavaScript中的callback方法
为了防止JavaScript阻塞主线程,所以起了一个线程
handler应该先声明
private Handler handler = new Handler(){
};
在JavaScript中增加方法:
function callback(msg) {
alert(msg);
}
成功!