android webview native与JavaScript相互调用 java与JavaScript相互调用

根据文章android webview 加载本地文件搭建实现一个简单的webview应用

在oncreat方法里面添加几行代码:

webView.setWebChromeClient(new WebChromeClient(){

       });

        webView.setWebViewClient(new WebViewClient(){

        });
        webView.addJavascriptInterface(new MyJavascriptInterface(MainActivity.this,webView),"jsbrige");

关键在于最后一行代码:

最后一个参数jsbrige指的是JavaScript调用Java的时候方法名最前面的字符串

webView.addJavascriptInterface(new MyJavascriptInterface(MainActivity.this,webView),"jsbrige");

新写一个类,起名MyJavascriptInterface

里面的代码如下:

package webview.fanruitian.cn.webview;

import android.app.Activity;
import android.os.Handler;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;

/**
 * Created by FRT on 2017/5/13.
 */

public class MyJavascriptInterface {

    private Activity activity;
    private WebView webView;
    private Handler handler = new Handler(){};

    MyJavascriptInterface(Activity activity,WebView webView) {
        this.activity = activity;
        this.webView = webView;
    }

    @JavascriptInterface
    public void toast(final String msg) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(activity, msg, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

这里面实现一个功能,当JavaScript调用jsbrige.toast("hello")的时候回自动调用android自带的toast方法:

修改index.html源码

增加一个button,id是test_jsbrige

当点击这个button的时候自动执行方法:

 $("#test_jsbrige").click(function(){
        jsbrige.toast("hello");
    });

测试:


JavaScript调用Java成功!


------------------------------------------------------------------------------------------------------------------------------------------------

下面Java调用JavaScript方法:

简单起见重写了按键方法:


@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode==KeyEvent.KEYCODE_BACK)
        {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    webView.loadUrl("javascript:callback('sadsaaadasdsad')");
                }
            });
           
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }


当点击返回的时候先起了一个线程线程里面执行JavaScript中的callback方法

为了防止JavaScript阻塞主线程,所以起了一个线程


handler应该先声明

private Handler handler = new Handler(){

    };


在JavaScript中增加方法:

 function callback(msg) {
        alert(msg);
    }


测试:



成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值