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

来源:互联网 发布:朕是什么意思网络此意 编辑:程序博客网 时间:2024/05/16 07:46

根据文章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);    }


测试:



成功!

0 0