Android中webview跟JAVASCRIPT中的交互

来源:互联网 发布:个性的淘宝店铺名字 编辑:程序博客网 时间:2024/05/16 09:46

在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面举例说明之:

1 JAVASCRIPT脚本调用android程序

要在webview中,调用addJavascriptInterface(OBJ,interfacename)
其中,obj为和javascript通信的应用程序,interfacename为提供给JAVASCRIPT调用的
名称,设置如下:

1WebView webView = new WebView(this);
2webView.getSettings().setJavaScriptEnabled(true);
3webView.loadUrl(getIntent().getCharSequenceExtra("url").toString());
4//设定JavaScript脚本代码的界面名称是”android”
5webView.addJavascriptInterface(this, "android");

其中WEBVIEW调用的HTML页中,JS如下:

1<script type="text/javascript">
2function ok() {
3  android.js(document.forms[0].elements[0].value, document.forms[0].elements[1].value);
4 }

而这个android.js在哪呢?那是在应用程序中的

1//JavaScript脚本代码可以调用的函数js()处理
2public void js(String action, String uri) {
3          ...../
4}

这个JS中就是处理JAVASCRIPT发送过来的请求了.

2) 下面的例子,当WEBVIEW网页中输入后,点提交按钮,会跟ANDROID的应用程序进行交互

01WebView webView = new WebView(this);
02webView.getSettings().setJavaScriptEnabled(true);
03webView.setWebChromeClient(new MyWebChromeClient());
04webView.loadUrl(getIntent().getCharSequenceExtra("url").toString());
05 
06//onJsAlert()函数接收到来自HTML网页的alert()警告信息
07public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
08 if (message.length() != 0) {
09AlertDialog.Builder builder = new AlertDialog.Builder(JExample02.this);
10builder.setTitle("From JavaScript").setMessage(message).show();
11result.cancel();
12return true;
13}
14return false;
15}

而HTML页中的JS事件为:

1<input type="button" value="alert"onclick="alert(document.forms[0].elements[0].value)">

特别提示下,在自定义的MyWebChromeClient())中,除了可以重写onJSAlert外,还可以
重写onJsPrompt,onJsConfirm等,可以参考
http://618119.com/archives/2010/12/20/199.html

3) 下面这个例子,先显示第一张图片,点一点后,再显示第2张图片
HTML JS中:

01   <script language="javascript">
02    function changeImage02() {
03        document.getElementById("image").src="navy02.jpg";
04    }
05    function changeImage01() {
06        document.getElementById("image").src="navy01.jpg";
07    }
08  </script>
09</head>
10<body>
11  <a onClick="window.demo.onClick()">
12    <img id="image" src="navy01.jpg"/></a>
13</body>

当点<a onClick="window.demo.onClick()">
后,调用ANDROID应用程序中的处理部分,看程序:

view source
print?
01webView.addJavascriptInterface(new JSInterface(),"demo");
02 
03public final class JSInterface {
04        //JavaScript脚本代码可以调用的函数onClick()处理
05 
06        public void onClick() {
07            handler.post(new Runnable() {
08                public void run() {
09                    if (flag == 0) {
10                    flag = 1;
11                    webView.loadUrl("javascript:changeImage02()");
12                    } else {
13                    flag = 0;
14                    webView.loadUrl("javascript:changeImage01()");
15                    }
16                }
17            });
18        }
19    }

可以看到,ANDROID中,通过webView.loadUrl去调用HTML页面中的JS

【转】 点击打开链接