[Android]WebView与Js交互的学习

最近公司让用JS调用本地客户端第三方分享,所有查阅了一下WebView与JS交互的方法。

经过个大神的博客学习,总结如下:

首先,要进行WebView交互,需要在Android中定义出来一个WebView。

mWebView = (WebView) findViewById(R.id.wv_webview);

第二,对WebView进行一定的初始化。

 //获取WebView的设置
        WebSettings webSettings = mWebView.getSettings();
        //设置WebView支持JavaScript 重要!
        webSettings.setJavaScriptEnabled(true);
        //设置编码方式
        webSettings.setDefaultTextEncodingName("utf-8");

第三,调用JS代码,加载HTML页面。

 /**
         * 设置JavaScript调用的方法 addJavascriptInterface(Object,String)
         * 第一个参数为调用的方法所在对象
         * 第二个参数为JavaScript中所使用的名称
         */
        mWebView.addJavascriptInterface(new MyObject(this),"testClick");
        //加载assets目录下的html
        mWebView.loadUrl("file:///android_asset/demo.html");

第四,设置JS要调用的方法 在第三部中addJavaScriptInterface()中的第一个参数

class MyObject{
        Context mContxt;
        public MyObject(Context context) {
            this.mContxt = context;
        }
        //android4.2以后需要加上该注解
        @JavascriptInterface
        public void jsCallAndroid(final String name) {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show();
                }
            });
        }
    }

第五,Android调用JS的设置 通过一个Button的点击事件处理 主要就是一句loadUrl("javascript:androidCallJs()");    前面javascript不能丢,冒号后面为调用js的方法名

mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //调用网页中的JS
                mWebView.loadUrl("javascript:androidCallJs()");
            }
        });

第六:对于点击没有效果  注意Android在4.2之前,是可以直接声明JS调用的本地方法的,但是在4.2之后 为了安全性,需要在本地方法上添加注解:@JavascriptInterface

键第四条上定义的JS调用的本地方法。

html文件放置assets目录:

<html>
    <body>
        <a>点击调用Android方法</a>
        <h1></h1>
    </body>

    <script>
        function androidCallJs(){
    	    document.getElementsByTagName("h1")[0].innerHTML="Android调用Js啦";
        }
        var clickA = document.getElementsByTagName('a')[0];
        clickA.addEventListener('click', function(){
            //调用android中的方法 注意testClick需要在android代码中定义
		    testClick.jsCallAndroid("Js调用Android啦");
            return false;
        }, false);
    </script>
</html>



运行界面如下:

点击调用Android方法 弹出吐司:

点击调用JS按钮:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值