原创,如需转载请标明出处。
一:本地html的加载问题
正常情况:
在app目录下的src文件夹下的main文件夹下创建assets文件夹,在assets文件夹下创建test.html。(assets应该与res文件夹同级别)
加载本地html方式:
webview.loadUrl("file:///android_asset/test.html");
如果:
如果创建的test.html是没有后缀名的,那么加载html应该这样:
webview.loadUrl("file:///android_asset/test");
二:一些注意事项
- webView.getSettings().setJavaScriptEnabled(true);
//启用JavaScript与android的交互。
- webView.addJavascriptInterface(new Contact(),"contact");
//添加JavaScript接口
@JavascriptInterface//必须标明否则访问不了
三:android与js交互的爬坑之旅
- android操作js,操作不了。
解决方案:
-
setJavaScriptCanOpenWindowsAutomatically(true);设置js可弹窗
runOnUiThread(new Runnable() { @Override public void run() { webView.loadUrl("javascript:jsText('"+text+"')"); } });
注:不能使用handler来发送post请求去调用js代码。(应该在同一线程)
-
/**
添加JavaScriptInterface * * 第一个参数:与js映射的java对象 * 第二个参数:该java被映射为js对象之后在js中的对象名,再js中要调用该对象的方法就通过这个来调用 */ webView.addJavascriptInterface(**new JsInterface(),"jsi"**);
如果js里边需要alert弹窗,那么java里边需要设置mWebView.setWebChromeClient(new WebChromeClient() { }
// 由于设置了弹窗检验调用结果,所以需要支持js对话框
// webview只是载体,内容的渲染需要使用webviewChromClient类去实现
// 通过设置WebChromeClient对象处理JavaScript的对话框
//设置响应js 的Alert()函数
特别注意:JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用。