標籤:android webview javascript 互動 addjavascriptinterfa
在 android 的應用程式中,可以直接調用 WebView 中的 javascript 代碼,而 WebView 中的 javascript 代碼,也可以去調用 ANDROID 應用程式(也就是 JAVA 部分的代碼).下面舉例說明之:
1、JAVASCRIPT 指令碼調用 android 程式
要在 WebView 中,調用 addJavascriptInterface(OBJ,interfacename)其中,obj 為和 javascript 通訊的應用程式,interfacename 為提供給 JAVASCRIPT 調用的名稱,設定如下:
<span style="font-size:14px;">WebView WebView = new WebView(this);WebView.getSettings().setJavaScriptEnabled(true);WebView.loadUrl(getIntent().getCharSequenceExtra("url").toString());//設定 JavaScript 指令碼代碼的介面名稱是”android”WebView.addJavascriptInterface(this, "android");</span> 其中 WebView 調用的 HTML 頁中,JS 如下:
<span style="font-size:14px;"><script type="text/javascript">function ok() {android.js(document.forms[0].elements[0].value, document.forms[0].elements[1].value);}</script></span> 而這個 android.js 在哪呢?那是在應用程式中的
<span style="font-size:14px;">//JavaScript 指令碼代碼可以調用的函數 js()處理public void js(String action, String uri) {...../}</span>這個 JS 中就是處理 JAVASCRIPT 發送過來的請求了.
2、下面的例子,當 WebView 網頁中輸入後,點提交按鈕,會跟 ANDROID 的應用程式進行互動
<span style="font-size:14px;">WebView WebView = new WebView(this);WebView.getSettings().setJavaScriptEnabled(true);WebView.setWebChromeClient(new MyWebChromeClient());WebView.loadUrl(getIntent().getCharSequenceExtra("url").toString());//onJsAlert()函數接收到來自 HTML 網頁的 alert()警告資訊public boolean onJsAlert(WebView view, String url, String message, JsResult result) {if (message.length() != 0) {AlertDialog.Builder builder = new AlertDialog.Builder(JExample02.this);builder.setTitle("From JavaScript").setMessage(message).show();result.cancel();return true;}return false;}</span>而 HTML 頁中的 JS 事件為:
<span style="font-size:14px;"><input type="button" value="alert" onclick="alert(document.forms[0].elements[0].value)"></span>
特 別 提 示 下 , 在 自訂的 MyWebChromeClient()) 中 , 除 了 可 以 重 寫 onJSAlert 外 , 還 可 以 重 寫onJsPrompt,onJsConfirm 等。
3、下面這個例子,先顯示第一張圖片,點一點後,再顯示第 2 張圖片
HTML JS 中:
<span style="font-size:14px;"><script language="javascript">function changeImage02() {document.getElementById("image").src="navy02.jpg";}function changeImage01() {document.getElementById("image").src="navy01.jpg";}</script></head><body><a onClick="window.demo.onClick()"><img id="image" src="navy01.jpg"/></a></body></span>
當點<a onClick="window.demo.onClick()">後,調用 ANDROID 應用程式中的處理部分,看程式
<span style="font-size:14px;">WebView.addJavascriptInterface(new JSInterface(),"demo");public final class JSInterface {//JavaScript 指令碼代碼可以調用的函數 onClick()處理public void onClick() {handler.post(new Runnable() {public void run() {if (flag == 0) {flag = 1;WebView.loadUrl("javascript:changeImage02()");} else {flag = 0;WebView.loadUrl("javascript:changeImage01()");}}});}}</span>
可以看到,ANDROID 中,通過 WebView.loadUrl 去調用 HTML 頁面中的 JS.
其實在第一篇文章中,就已經接觸到了webView和js的相互調用了,大體先介紹到這吧。
(五) Android中WebView跟JavaScript中的互動