Android中Java和JavaScript互動 Android原生和html互動
阿新 • • 發佈:2019-02-04
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也執行在主執行緒。