共计 1350 个字符,预计需要花费 4 分钟才能阅读完成。
1. 本地 web 资源
1. 构建 assets/web 文件夹
2. 创立 index.html
你的 html 代码
3. 应用本地 web 资源
WebView mv = findViewById(...);
mv.loadUrl("file:///android_asset/web/index.html")
2. 实现根底的 android 和 js 交互
(1). 实现 js 调用 andorid 办法
- 在 Acitivity 内构建一个 function
@JavascriptInterface
public void test(){Log.e("测试","====");
}
@JavascriptInterface 在新版本的 api 内必须 否则无成果
- 将 android 对象转 js 对象供 js 调用
WebView mv = findViewById(...);
mv.addJavascriptInterface(this,"activity")
mv.loadUrl("file:///android_asset/web/index.html")
- js 调用
window.activity.test()
(2). android 调用 js 办法
WebView mv = findViewById(...);
mv.getSettings().setJavaScriptEnabled(true);
mv.loadUrl("javascript:alert('test')");
(3). js 传参回调函数给 android 触发
- 注入一个 js 对象,存储回调函数
js 对象
var callbacks = {fns:[],
add(fn){this.fns.push(fn);return this.fns.length-1;},
get(id){return this.fns[id];}
}
注入形式
WebView vc = findViewById(...);
vc.getSettings().setJavaScriptEnabled(true);
vc.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url)
{super.onPageFinished(view, url);
vc.loadUrl("javascript:js 代码");
}
});
- android 回调办法
@JavascriptInterface
public void callback(String msg,int callback_id){mHandler.post(new Runnable() {
@Override
public void run() {WebView vc = findViewById(...);
vc.getSettings().setJavaScriptEnabled(true);
vc.loadUrl("javascript:callbacks.get("+callback_id+")('"+msg+"')");
}
});
}
- js 端调用
var callback_id = callbacks.add(function(msg){alert(msg)
});
window.activity.callback("测试",callback_id)
根底交互就是这样了
正文完