最近有涉及到android与Html 5 JS交互的工作,来记录总结一下。
首先,android WebView webView 设置
webview.getSettings().setJavaScriptEnabled(true);
//绑定建立的javascript对象
webview.addJavascriptInterface(new JsInterface(),"android");
其中,JsInterface对象是android自定义的专门提供给js调用的;
“android”是和Js相对应的一个参数,Html5见到android就会去调用JsInterface()里面的方法
webview.loadUrl(url);//url是初始界面的url
接下来,监听该url是否加载完成:
webview.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view,String url){
super.onPageFinished(view,url);
//如果是监听初始url加载完成后,需要调用js的话,使用该方法去调用js
webview.loadUrl(javascript:functionA(name));
//其中,functionA(String name)必须与Html5中的方法是一致的。
}
});
public class JsInterface{
@JavascriptInterface//这个需要在API17以上需要在每个方法前加上
public void functionB(String json){
//若需要更新UI(其实就是要更新主线程UI),此时若Html5调用此方法通知native是在非主线程中,如果直接更新页面显示常会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
runOnUiThread(new Runnable(){
@Override
public void run(){
//在此更新UI即可。
}
}
}
}