android webview与js交互

js调用android

1.创建js需要调用的java方法

import android.util.Log;
import android.webkit.JavascriptInterface;

public class JsFun {
    @JavascriptInterface
    public void fun1() {
        Log.d("js", "fun1");
    }

    @JavascriptInterface
    public void fun2() {
        Log.d("js", "fun2");
    }
}

2.创建html文件

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <button onclick="clickBtn()">调用js</button>

    <script>
         function clickBtn(){
            test.fun1();
        }
    </script>
</body>
</html>

3.创建webview,并将java方法绑定到webview

public class SecondActivity extends AppCompatActivity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_second);

        webView = findViewById(R.id.second_wv);

        WebSettings webSettings = webView.getSettings();
        webView.getSettings().setJavaScriptEnabled(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowContentAccess(true);
        webSettings.setDomStorageEnabled(true);

        webView.getSettings().setAllowFileAccessFromFileURLs(true);


        webView.loadUrl("file:///android_asset/dist/index.html");

        webView.addJavascriptInterface(new JsFun(), "test");

    }
}

总结:webView.addJavascriptInterface(new JsFun(), "test")这句代码相当于在js内部创建了一个新的对象test,为这个对象添加了一个方法fun1,所以js可以直接调用test.fun1()

 

js调用android 传参

 function funString1(){
            jsCallAndroid.funString1("hello");
        }

        function funString2(){
            jsCallAndroid.funString2("hello", "world");
        }

        function funInt(){
            jsCallAndroid.funInt(5);
        }

        function funBool1(){
            jsCallAndroid.funBool1(true);
        }

        function funBool2(){
            jsCallAndroid.funBool2(false);
        }
    @JavascriptInterface
    public void fun2() {
        Log.d("js", "fun2");
    }

    @JavascriptInterface
    public void funString1(String s) {
        Log.d("js", "funString:" + s);
    }

    @JavascriptInterface
    public void funString2(String s1, String s2) {
        Log.d("js", "funString:" + s1 + "," + s2);
    }

    @JavascriptInterface
    public void funInt(int a) {
        Log.d("js", "funInt:" + a);
    }

    @JavascriptInterface
    public void funBool1(boolean a) {
        Log.d("js", "funInt:" + a);
    }

    @JavascriptInterface
    public void funBool2(boolean a) {
        Log.d("js", "funInt:" + a);
    }

js调用android 获取返回值

        function funRet(){
            var ret  = jsCallAndroid.funRet();
            jsCallAndroid.funString1(ret);
        }
    @JavascriptInterface
    public String funRet() {
        Log.d("js", "funRet");
        return "i am return";
    }

 

Android调用JS

        // 获取返回值
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 只需要将第一种方法的loadUrl()换成下面该方法即可
                webView.evaluateJavascript("javascript:callJs1()", new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String value) {
                        Log.d("js", "onReceiveValue: " + value);
                    }
                });
            }
        });

        // 传字符串
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 只需要将第一种方法的loadUrl()换成下面该方法即可
                webView.evaluateJavascript("javascript:callJs2('hahha')", new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String value) {
                        Log.d("js", "onReceiveValue: " + value);
                    }
                });
            }
        });
        
        

        final String script = "javascript:callJs3({'name':'zhang','age':'18'})";
        // 传对象
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 只需要将第一种方法的loadUrl()换成下面该方法即可
                webView.evaluateJavascript(script, new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String value) {
                        Log.d("js", "onReceiveValue: " + value);
                    }
                });
            }
        });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值