Android与Javascript互相调用

介绍

在android开发项目中,我们经常会将一些功能放在html中,比如一些活动界面,版权界面之类的,或者分了分流一下视频区的流量,可能会在流量大的时候,打开web的接口。这时我们知道使用html界面要用到webview,而使用android时也需要注意与非源生的交互,就是android和js的互相调用。

配置
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("file:///android_asset/web.html");

这里首先让webview支持javascript,然后作为demo直接加载本地的html。

android调用js方法

直接在onclick事件中写

webView.loadUrl("javascript:javacalljs()");
webView.loadUrl("javascript:javacalljswith(" + "'参数'" + ")");
            

string就是js的方法名。
对应js的代码

function javacalljs(){
     document.getElementById("content").innerHTML =
         "<br\>JAVA调用了JS的无参函数";
}

function javacalljswith(arg){
     document.getElementById("content").innerHTML =
         ("<br\>"+arg);
}
js调用java

我们先看下js代码

<input type="button"  value="js调用java" onclick="window.android.startFunction()" />
<input type="button"  value="js调用java传递参数" onclick="window.android.startFunction('参数')"  />

在android中我们需要使用addJavascriptInterface方法添加js的方法。

webView.addJavascriptInterface(MainActivity.this, "android");

android就是js中对应的命名空间
以下我们可以直接在MainActivity里面写注解方法:

    @JavascriptInterface
    public void startFunction(final String text) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {

            }
        });
    }
    @JavascriptInterface
    public void startFunction() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {

            }
        });
    }

或者我们将js方法全部写在一个类里面,比如JsonObject。
实例化的时候将 context和handler传过去,用于上下文和回调。

jsObject = new JsObject(MainActivity.this,mHandler);

在添加接口时将对象传入:

webView.addJavascriptInterface(jsObject, "android");

然后直接在jsonObject类下写注解方法即可,再用handler回调,这样方便管理。

其他

如果我们多次addJavascriptInterface的时候,在对象不同的情况下,比如我们先

webView.addJavascriptInterface(MainActivity.this, "android");

webView.addJavascriptInterface(jsObject, "android");

那么只有后面的生效,前面的被覆盖。
但是我们要增加多个空间的话

webView.addJavascriptInterface(MainActivity.this, "android");
webView.addJavascriptInterface(MainActivity.this, "java");

这样是可行的,俩个均有效果。

转载请注明出处:http://www.jianshu.com/p/f5c77a655ea6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容