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如下:
<script type="text/javascript">function jsToAndriod() { var msg = 'jsToAndriod';javascript:android.getResult(msg);}function androidToJs(){var msg = 'androidToJs';alert(msg);}</script> 在Android程式中需要有如下的代碼,即定義JavaScript調用的介面:
第一步:先註冊提供給JavaScript調用的介面
webview.addJavascriptInterface(new JavaScriptinterface(), "android");
第二步:定義介面
class JavaScriptinterface{@JavascriptInterfacepublic 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介面的問題,會報錯說這個介面沒有定義。