JS與Android互調
阿新 • • 發佈:2019-02-20
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如下:
在Android程式中需要有如下的程式碼,即定義JavaScript呼叫的介面:<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>
第一步:先註冊提供給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介面的問題,會報錯說這個介面沒有定義。