最近公司弄点这样的需求,我借此机会学习重新温故了一下,Js掉用android原生的方法 还有把值传回给js的方法
JavaScript掉Android原生
android代码
private void initView() {
mWebView = findViewById(R.id.web_x);
WebSettings webSettings = mWebView.getSettings();
// 设置与Js交互的权限
webSettings.setJavaScriptEnabled(true);
//设置编码
//webSettings.setDefaultTextEncodingName("GBK");
// 设置允许JS弹窗
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
//加载页面
mWebView.loadUrl("file:///android_asset/index.html");
//TODO JS 调用Android原生
mWebView.addJavascriptInterface(new StartOne(), "test");
}
说明: new StartOne() 启动回调的方法, 这个test是启动 JavaScript回调原生方法的必不可少的,IOS则是不需要这个前缀的。
JavaScript代码
<script>
function startSdk(){
test.startHome("启动SDK首页");
}
</script>
test.startHome
startHome : JavaScript的方法名
android代码
//进入主页
public class StartOne{
@JavascriptInterface
public void startHome(final String message) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.e("MME", message );
startActivity(new Intent(HomeActivity.this, HomeActivity.class));
}
});
}
}
在android中@JavascriptInterface 下要以JavaScript的方法名命名android的方法名,不然js怎么知道它要调起哪里。
然后执行下看下效果
掉起后的页面
Android原生给JavaScript传值的方法有好多,我写个我常用的方法 =_=!
Android原生给JavaScript传值
js调起android原生,原生android处理一些业务逻辑之后,再把处理完的结果返回给js
android代码
mWebView.loadUrl("javascript:WriteX('"+s+"')");
WriteX 是与js商定的或回传方法
JavaScript代码
<script>
function WriteX(res){
document.getElementById('signResult').value = res;
}
</script>
js拿到值并回显