在开发的时候遇到了这个问题,现在记录一下。只涉及到了最基本的使用,没有更深一步的细究。
以下方法加载本地 html或者联网的 html都适用。
一 .android 调用 js
Java部分
@SuppressLint("SetJavaScriptEnabled")
private void test(WebView webView, String url) {
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
//加载本地HTML
//webView.loadUrl("file:///android_asset/JsToAndroid.html");
//加载网络HTML
webView.loadUrl(url);
//调用js方法
webView.loadUrl("javascript:callJS()");
}
(1)加载的页面如果是项目本地的 html的话,格式固定为file:///android_asset/文件名.html
(2)调用 js 方法的时候,“javascript:callJS()”前面 javascript 是固定的写法,callJS()是要调用的 js 的方法名字,要和 js 中的方法保持一致。
js部分
<!-- 安卓调用js -->
<script>
function callJS(参数){
console.log(参数);
}
</script>
注意:如果所调用的 js 的方法是需要传入参数的,上面 调用 js 的方法就写成
webView.loadUrl("javascript:callJS(" + 参数+ ")");
二 . js 调用Android
Java部分
先写一个与 js 对象映射关系的Android类
class JsObject {
@JavascriptInterface
public void loginOut() {
Intent intent = new Intent(WebActivity.this, LoginActivity.class);
startActivity(intent);
}
}
示例代码是跳转了一个页面,就是点击 html页面中的退出登录按钮,跳转到 LoginActivity 页面
调用
private void callJava(WebView webView, String url) {
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JsObject(), "call");
//加载本地HTML
//webView.loadUrl("file:///android_asset/JsToAndroid.html");
//加载网络HTML
webView.loadUrl(url);
}
js 部分
<!-- js调用安卓 -->
<script>
function callAndroid() {
<!--由于对象映射,所以调用test对象等于调用Android映射的对象-->
call.logOut();
}
</script>
(1)Java映射类 JsObject 的 logout() 方法前要加注解 @JavascriptInterface
(2)call相当于一个映射的对象,Java 端的对象为 call 的话,js 端调用的对象也必须为 call
(3)JsObject 类中的定义的方法 logout()要和 js 中的方法名称保持一致
注意:如果 js 需要向 Java 传递参数的话,js 部分代码为
call.logout("123")
Java部分代码( 在 JsObject 类中的logout()方法中接收)
public void logout(String para){
log.e ( TAG , para );
}
以上,本人才疏学浅,目前只能有这个程度。其实使用起来还是很简单的。