二.JS端去调用Android原生代码
JS端调用Android端代码有3种方法:
2.1.通过WebView的addJavascriptInterface()进行对象映射
2.2通过WebViewClient的shouldOverrideUrlLoading()方法回调拦截url
2.3.通过WebChromeClient的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt()消息
2.1通过WebView的addJavascriptInterface()进行对象映射
实例:
1.先定义一个JS映射对象
AndroidToJs类:
public class AndroidToJs extends Object{
@JavascriptInterface//处理漏洞
public void hello(String s){
return " " ;
}
@JavascriptInterface//处理漏洞
public String work(String s){
return "hello:"+s;
}
}
invite.html:
2.JavaScript内定义方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的第一个网页</title>
</head>
<body>
<div>我的第一个网页</div>
<button onclick="inviteBtn()">点我</button>
<script>
function call(msg){
document.querySelector('h1').innerHTML=msg;
return "Hello"+msg;
}
</script>
</body>
</html>
3.Android调用JavaScript方法
webView.addJavascriptInterface(new AndroidToJS(),"app");
webView=findViewById(R.id.web);
WebSettings webSettings=webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);//打开DOM存储API,如果不开口有可能网页显示不全
webView.addJavascriptInterface(new AndroidToJs(),"app");//AndroidtoJS类对象映射到js的test对象
webView.loadUrl("file:///android_asset/invite.html");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.evaluateJavascript("javascript:call('孙琳琳')", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Toast.makeText(WebActivity.this,s,Toast.LENGTH_LONG).show();
}
});
}
});
8be18397ffedd9c4da2266f962c45e3.jpg
网友评论