1. 程式人生 > >JS與Android互調

JS與Android互調

JavaScript與Android程式之間的互動怎樣實現呢?前幾天在專案中遇到了這樣的問題。其實還是多簡單的,只有一個地方需要注意,那就是JavaScript與Android版本相容性。這裡先來總結下JavaScript呼叫Android程式和Android程式呼叫JavaScript的方法。

首先設定WebView的屬性,如果需要該Webview能與JavaScript直接進行互動,必須將其setJavaScriptEnabled設定為true。如下面幾行程式碼

webview = (WebView) this.findViewById(R.id.webView1);
WebSettings webSetting = webview.getSettings();
webSetting.setJavaScriptEnabled(true);// 是否支援javaScript

1、JavaScript呼叫Android程式

JavaScript呼叫Androd程式需要Android程式中提供一個介面,個人認為在JavaScript呼叫Android介面的過程,有點類似於回撥。具體如下

讓webview載入demo.html網頁,網頁中設定一按鈕,當點選按鈕的時候就呼叫Android介面,demo.html如下:

<html>  
	<body>   
	<input type="button" value="登入" onClick="jsToAndriod();" /> 

	<script type="text/javascript">
	function jsToAndriod() { 
		var msg = 'jsToAndriod';
		javascript:android.getResult(msg);
	}
	
	function androidToJs(){
		var msg = 'androidToJs';
		alert(msg);
	}
	</script>
	</body>  
</html> 
在Android程式中需要有如下的程式碼,即定義JavaScript呼叫的介面:

第一步:先註冊提供給JavaScript呼叫的介面

webview.addJavascriptInterface(new JavaScriptinterface(), "android");
第二步:定義介面
class JavaScriptinterface{
		@JavascriptInterface
		public void getResult(String str){
			Log.e("","result = " + str);
		}
	}

2、Android呼叫JavaScript介面

可以看到上面demo.html中有一個介面叫做androidToJs,是的,在JavaScript中就是這樣申明和定義介面的,在android程式中只需要這樣去呼叫即可:

webview.loadUrl("javascript:androidToJs()");   //調js中的方法  call in UI Thread !
注意是在主執行緒中呼叫哦,不然會有異常。

3、JavaScript和Android存在版本相容性問題

如果夠細心的話,可以看到在定義JavaScript呼叫Android介面的時候,在Android介面jsToAndroid()上面是有一個註釋@JavascriptInterface,是的,最好加上這一句,不然可能會存在JavaScript調不到Android介面的問題,會報錯說這個介面沒有定義。