在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面举例说明之:
1 JAVASCRIPT脚本调用android程序
要在webview中,调用addJavascriptInterface(OBJ,interfacename)
其中,obj为和javascript通信的应用程序,interfacename为提供给JAVASCRIPT调用的
名称,设置如下:
1 | WebView webView = new WebView( this ); |
2 | webView.getSettings().setJavaScriptEnabled( true ); |
3 | webView.loadUrl(getIntent().getCharSequenceExtra( "url" ).toString()); |
5 | webView.addJavascriptInterface( this , "android" ); |
其中WEBVIEW调用的HTML页中,JS如下:
1 | <script type= "text/javascript" > |
3 | android.js(document.forms[0].elements[0].value, document.forms[0].elements[1].value); |
而这个android.js在哪呢?那是在应用程序中的
2 | public void js(String action, String uri) { |
这个JS中就是处理JAVASCRIPT发送过来的请求了.
2) 下面的例子,当WEBVIEW网页中输入后,点提交按钮,会跟ANDROID的应用程序进行交互
01 | WebView webView = new WebView( this ); |
02 | webView.getSettings().setJavaScriptEnabled( true ); |
03 | webView.setWebChromeClient( new MyWebChromeClient()); |
04 | webView.loadUrl(getIntent().getCharSequenceExtra( "url" ).toString()); |
07 | public boolean onJsAlert(WebView view, String url, String message, JsResult result) { |
08 | if (message.length() != 0 ) { |
09 | AlertDialog.Builder builder = new AlertDialog.Builder(JExample02. this ); |
10 | builder.setTitle( "From JavaScript" ).setMessage(message).show(); |
而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" ; |
05 | function changeImage01() { |
06 | document.getElementById( "image" ).src= "navy01.jpg" ; |
11 | <a onClick= "window.demo.onClick()" > |
12 | <img id= "image" src= "navy01.jpg" /></a> |
当点<a onClick="window.demo.onClick()">
后,调用ANDROID应用程序中的处理部分,看程序:
01 | webView.addJavascriptInterface( new JSInterface(), "demo" ); |
03 | public final class JSInterface { |
06 | public void onClick() { |
07 | handler.post( new Runnable() { |
11 | webView.loadUrl( "javascript:changeImage02()" ); |
14 | webView.loadUrl( "javascript:changeImage01()" ); |
可以看到,ANDROID中,通过webView.loadUrl去调用HTML页面中的JS
【转】 点击打开链接