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.lxweimin.com/p/f5c77a655ea6

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容