Android:原生Java代码向网页Javascript传值

前言

Android Java代码向Javascript传值有两种方法:

  1. 通过对象映射类方法return传值
  2. 通过调用JavaScript方法传值

🏹 1. 方法一:对象映射类方法return传值

先说说第一种,android侧通过方法return值传至网页端,然后JavaScript通过弹窗把内容显示出来。

1.1 Html部分

<button id="button">Hello Android!</button>
<script>
    document.getElementById('button').onclick = function() {
        if (window.nativeMethod) {
            //  定义一个变量result,接收来自Android中hello方法的return值
            var result = nativeMethod.hello();
            //  弹窗显示result值
            alert(result);
        }
    }
</script>

1.2 Android部分

    @SuppressLint("SetJavaScriptEnabled")
    private void initView() {
        WebView webView = findViewById(R.id.webView);
        //  载入网页的URL地址
        webView.loadUrl("file:///android_asset/main.html");
        //	给WebView添加JavaScript接口
        //	该方法接收两个参数,第一个为对象映射类
        //	第二个自定义一个别名,用于JavaScript访问Android里的映射类  
        webView.addJavascriptInterface(new JsInterface(),"nativeMethod");
        //	WebChromeClient用于辅助WebView处理JavaScript的对话框、
        //	网站图标、网站title、加载进度等等
        //	这里的作用主要是把JS的弹窗显示出来
        webView.setWebChromeClient(new WebChromeClient());

        WebSettings webSettings = webView.getSettings();
        //  允许WebView加载JavaScript
        webSettings.setJavaScriptEnabled(true);
    }

    public class JsInterface {
        //  安全原因,android 4.x版本之后必须打「JavascriptInterface」的注解,JavaScript才能访问该方法
        @JavascriptInterface
        public String hello() {
            return "Hello JavaScript!";
        }
    }

1.3 效果图:

在这里插入图片描述

🖇 2. 方法二:调用JavaScript方法传值

第二种方法是通过WebView中的loadUrl()方法调用JavaScript代码。没错,WebView的loadUrl()方法不仅可以载入网页的URL地址,也能调用JavaScript中的代码并传值,类似于以下写法:

String value = "你好,JavaScript!";
webView.loadUrl("javascript:hello('" + value + "');");

其中value为想要传递的值,hello()则为JavaScript中的方法。(注意hello里面的参数要用单引号包裹)。

2.1 Html部分

在Js中定义一个方法,用于给Android调用并传值。

<script>
    function hello(value) {
        alert(value);
    }
</script>

2.2 Android部分

定义一个按钮,并给按钮一个监听事件:

@SuppressLint("SetJavaScriptEnabled")
    private void initView() {
        WebView webView = findViewById(R.id.webView);
        //  载入网页的URL地址
        webView.loadUrl("file:///android_asset/main.html");
        //	给WebView添加JavaScript接口
        //	该方法接收两个参数,第一个为对象映射类
        //	第二个自定义一个别名,用于JavaScript访问Android里的映射类
        webView.addJavascriptInterface(new JsInterface(),"nativeMethod");
        //	WebChromeClient用于辅助WebView处理JavaScript的对话框、
        //	网站图标、网站title、加载进度等等
        //	这里的作用主要是把JS的弹窗显示出来
        webView.setWebChromeClient(new WebChromeClient());

        WebSettings webSettings = webView.getSettings();
        //  允许WebView加载JavaScript
        webSettings.setJavaScriptEnabled(true);
        
        //  初始化按钮并设置监听事件
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String value = "你好,JavaScript!";
                webView.loadUrl("javascript:helloJs('"+value+"')");
            }
        });
    }

2.3 效果图:

在这里插入图片描述

2020年2月7日 星期五

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值