2.1Js端调用Android端代码

2019-11-06  本文已影响0人  琳媚儿

二.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
上一篇 下一篇

猜你喜欢

热点阅读