[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
留言
張貼留言