但卻不適用於 android 2.3.x, 因為會有問題. (App 直接關閉)
下面是我所使用的方式, 讓我們可以在 2.3.x 去調用 java 函式.
稍微修改了一下所使用的 html, 修改 showMsg 所使用的方式
<!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");
}
</script>
</head>
<body>
<input type='button' value='Click Me' onclick='showMsg();' />
</body>
</html>
執行結果如下圖:
透過這個我們可以利用這個方式來非直接的調用 java 函式,
特別注意的是第 10 行, 如果不 cancel, 畫面就會因為這個 prompt 而無法操作喔.
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); } };
再次修改一下 html 檔.
<!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", "jstesting");
}
</script>
</head>
<body>
<input type='button' value='Click Me' onclick='showMsg();' />
</body>
</html>
這樣就可以調用 java 函式了.
如果覺得上面方式有點怪異或麻煩, 也可以使用參考資料 [1] 的方式.
不過對我而言以上方式就是最簡單的方式了.
範例原始碼: WebViewExample4_1
參考資料:
[1]. http://fred-zone.blogspot.tw/2011/12/android-23x-javascript-interface.html
沒有留言:
張貼留言