1. 程式人生 > >Android中Java和JavaScript互動 Android原生和html互動

Android中Java和JavaScript互動 Android原生和html互動

1.WebView開啟JavaScript指令碼執行

WebSettings settings = webView.getSettings();
      settings.setJavaScriptEnabled(true);

2.WebView設定供JavaScript呼叫的互動介面。

  webView.addJavascriptInterface(new JsInteration(), "android");

3.客戶端和網頁端編寫呼叫對方的程式碼。
java程式碼

 public class JsInteration {

      @JavascriptInterface
public void toastMessage(String message) { Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); } @JavascriptInterface public void onSumResult(int result) { Log.i(LOGTAG, "onSumResult result=" + result); } }

htlm程式碼

<html
>
<script type="text/javascript"> function toastMessage(message) { window.control.toastMessage(message) } function sumToJava(number1, number2){ window.control.onSumResult(number1 + number2) } </script> Java-Javascript Interaction In Android </html>

js呼叫Java
呼叫格式為window.jsInterfaceName.methodName(parameterValues) 此例中我們使用的是android作為注入介面名稱。

function toastMessage(message) {
  window.control.toastMessage(message)
}
function sumToJava(number1, number2){
   window.control.onSumResult(number1 + number2)
}

java呼叫js
webView呼叫js的基本格式為webView.loadUrl(“javascript:methodName(parameterValues)”)

webView.loadUrl("javascript:sumToJava(1,2)");

這就實現了java與js之間的相互呼叫。

呼叫js有引數有返回值的函式
Android在4.4之前並沒有提供直接呼叫js函式並獲取值的方法,所以在此之前,常用的思路是 java呼叫js方法,js方法執行完畢,再次呼叫java程式碼將值返回。
Android 4.4之後使用evaluateJavascript即可。這裡展示一個簡單的互動示例 具有返回值的js方法

html程式碼

function getGreetings() {
      return 1;
}

java程式碼

private void testEvaluateJavascript(WebView webView) {
  webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() {
  @Override
  public void onReceiveValue(String value) {
      Log.i(LOGTAG, "onReceiveValue value=" + value);
  }});
}

evaluateJavascript方法必須在UI執行緒(主執行緒)呼叫,因此onReceiveValue也執行在主執行緒。