[Android]JavaScript與Android溝通
------------有問題的方法-------------------------------------------------------------------
在 Android 裡將網頁載入到畫面使用 WebView 元件就可以很輕鬆達成任務,如果要再加上跟 JavaScript 的互動的話
Android 系統也提供了互通機制可從 Android 呼叫 JavaScript 的函式或從 JavaScript 呼叫 Android 的函式。
設定Android的WebView
透過WebChromeClent我們可以利用這個方式來非直接的調用 java 函式,
特別注意的是第 10 行, 如果不 cancel, 畫面就會因為這個 prompt 而無法操作喔.
參考資料:http://www.allenj.net/?p=2704
http://weakapp0320.blogspot.tw/2013/05/23x-android-os-java.html
在 Android 裡將網頁載入到畫面使用 WebView 元件就可以很輕鬆達成任務,如果要再加上跟 JavaScript 的互動的話
Android 系統也提供了互通機制可從 Android 呼叫 JavaScript 的函式或從 JavaScript 呼叫 Android 的函式。
設定 Android 端
建立一個類別 JavaScriptInterface
專門給 JavaScript 呼叫
專門給 JavaScript 呼叫
1
2
3
4
5
6
| /** 建立給 JavaScript 呼叫的函式 **/ public class JavaScriptInterface { public void fun1() { //Android 要執行的程式碼 } } |
設定 WebView 的功能
1
2
3
4
5
| //啟用 WebView 的 JavaScript 執行功能 webView.getSettings().setJavaScriptEnabled( true ); //設定允語 JavaScript 呼叫的對應名稱 webView.addJavascriptInterface( new JavaScriptInterface(), "android" ); |
設定 JavaSript 端
1
2
3
4
5
| <script type= "text/javascript" > function fun2() { //JavaScript 要執行的程式碼 } </script> |
JavaScript 與 Android 程式碼互相呼叫
Android
1
| mWebView.loadUrl( "javascript:fun2()" ); |
JavaScript
1
| window.android.fun1(); |
--------------------------------------------------------------------------------------------------------------------------
------------解決的方法-------------------------------------------------------------------
上列方法在一些版本或在一些手機上無法進行溝通,因此本人使用以下的方法。
設定Html端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <!DOCTYPE html> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> < title >Example</ title > < meta name = "viewport" content = "user-scalable=yes,target-densityDpi=device-dpi,width=device-width" /> < script type = 'text/javascript' > function showMsg() { prompt("This is prompt", "defaultValue"); } </ script > </ head > < body > < input type = 'button' value = 'Click Me' onclick = 'showMsg();' /> </ body > </ html > |
設定Android的WebView
透過WebChromeClent我們可以利用這個方式來非直接的調用 java 函式,
特別注意的是第 10 行, 如果不 cancel, 畫面就會因為這個 prompt 而無法操作喔.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| WebChromeClient mWebChromeClient = new WebChromeClient() { @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { if ((defaultValue != null ) && (defaultValue.length() != 0 )) { if (defaultValue.equalsIgnoreCase( "jstesting" )) { Toast.makeText(MainActivity. this , R.string.msg_js_call_toast, Toast.LENGTH_SHORT).show(); result.cancel(); return true ; } } return super .onJsPrompt(view, url, message, defaultValue, result); } }; |
http://weakapp0320.blogspot.tw/2013/05/23x-android-os-java.html
留言
張貼留言