Android 與 h5 js互動問題,初步瞭解。
接觸Android也算很久了,但是js互動一直不熟也可以說是沒認真接觸過。今天專案修改也完成了,閒來無事忽然想起了這個問題,上網查找了一下,初步瞭解了一下。自己也寫了demo還算ok!
廢話不多說了,咱直接來說一下。(寫這個呢可能幫不到太多人,但是想讓自己印象深刻一些!)
首先,js互動分為兩種(Android基於webview操作):一、Android端觸發web端的事件;二、相反的,就是web中呼叫Android本地的方法。
我們接下來就分別說一下這兩種情況:
1、Android端觸發web端的事件:我在程式碼裡呢寫了一個按鈕,實現了點選事件
其中的onClick事件出發了點選事件,但是有一點我沒搞清楚就是,為什麼我在一個按鈕的話 通過id來分別呼叫兩個方法,沒成功。所以此處就用一個吧。在我們程式碼裡有一個方法是
//Android呼叫有返回值js方法 @TargetApi(Build.VERSION_CODES.KITKAT) public void onClick(View v) { //有返回值 mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.e(TAG, "onReceiveValue value=" + value); Toast.makeText(MyWebViewActivity.this,value,Toast.LENGTH_SHORT).show(); } }); //無返回值 // mWebView.loadUrl("javascript:s()"); }
此處就是詳細呼叫時的情況,在此處有兩種呼叫的方式,當呼叫方法有返回值時,或者沒有返回值。
sum(1,2)實在html檔案中自己寫的一個求和方法
function sum(a,b){ return a+b; } 當然在實際開發中,這個具體方法還需要前段同時來辛苦一下子!
s()方法,是一個沒有返回值的方法,所以我們可以直接用以上的形式呼叫(具體方法程式碼是呼叫了我們本地自己寫的程式碼一會會說到。)
function s(){ var result =window.android.hello(); document.getElementById("p").innerHTML=result; }
這樣的話,Android本地呼叫web的方法就成功了!
2、接下來說一下web呼叫Android本地的方法(此處很容易想到的例子就是當前段給我們一個web頁是有一個返回按鈕,但我們點選想讓他會出我們自己寫的activity時,結果出發的是他們web內部的方法,而沒有結束我們當前想關閉的activity)
先貼一下程式碼
WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new JsInteration(), "android");
這個是webview的基礎配置,第二行是你要跟獲得跟js互動的許可權一定要有!
第三行呢,就是我們接下來要說的了 。很明顯 new JsInteration 是我們自己寫的一個class類,“android”這個標誌我認為是宣告一下是Android端吧。JsInteration的實現如下:
//h5呼叫本地方法 public class JsInteration { @JavascriptInterface public String hello() { return "hello word"; } @JavascriptInterface public String hello11() { return "hello word11123"; } @JavascriptInterface public void fin() { MyWebViewActivity.this.finish(); } }
這裡面有三個方法,共同點就是 @JavascriptInterface註釋!!這些方法,你可以自己隨便定義按照具體需求。此處就出現了剛才我說的要在下面說的那行程式碼:
var result =window.android.hello();
window.android.hello();就是呼叫了我們Android的方法,返回的值賦給了result。至於document.getElementById("p").innerHTML=result; 這行程式碼是h5中的程式碼,想我媳婦請教之後的值就是給一個“p”標籤賦值。太簡單。這樣一來我們通過
<button onclick="s()">呼叫本地方法</button>
h5中的這個方法就呼叫了
function s(){ var result =window.android.hello(); document.getElementById("p").innerHTML=result; }
而這行程式碼又呼叫了我們寫在本地的hello()方法,這樣就呼叫成功了!!!
-----------------------------------------------------------------
寫一遍,自己以後對這個更熟悉了,也方便回頭嘲笑一下以前的自己。 哈哈,感覺自己寫完覺得好亂!!