Android中webview跟JAVASCRIPT中的交互

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

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

WebView webView = new WebView(this); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl(getIntent().getCharSequenceExtra("url").toString()); 
//设定JavaScript脚本代码的界面名称是”android” 
webView.addJavascriptInterface(this, "android"); 
其中WEBVIEW调用的HTML页中,JS如下: 
<script type="text/javascript"> 
function ok() { 
  android.js(document.forms[0].elements[0].value, document.forms[0].elements[1].value); 
}

而这个android.js在哪呢?那是在应用程序中的 
//JavaScript脚本代码可以调用的函数js()处理 
public void js(String action, String uri) { 
          ...../
}

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

2) 下面的例子,当WEBVIEW网页中输入后,点提交按钮,会跟ANDROID的应用程序进行交互 
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; 
}

而HTML页中的JS事件为: 
  <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中: 
   <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>

当点<a onClick="window.demo.onClick()"> 
后,调用ANDROID应用程序中的处理部分,看程序: 
     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()"); 
                    } 
                } 
            }); 
        } 
    } 
可以看到,ANDROID中,通过webView.loadUrl去调用HTML页面中的JS

时间: 2024-08-28 12:25:21

Android中webview跟JAVASCRIPT中的交互的相关文章

(五) Android中WebView跟JavaScript中的交互

在 android 的应用程序中,可以直接调用 WebView 中的 javascript 代码,而 WebView 中的 javascript 代码,也可以去调用 ANDROID 应用程序(也就是 JAVA 部分的代码).下面举例说明之: 1.JAVASCRIPT 脚本调用 android 程序 要在 WebView 中,调用 addJavascriptInterface(OBJ,interfacename)其中,obj 为和 javascript 通信的应用程序,interfacename

Android中WebView的JavaScript代码和本地代码交互的三种方式

一.Android中WebView的漏洞分析 最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视,关于这个漏洞,这里就不多做解释了,可能有的同学早就了解了,本来想写一篇文章详细介绍一下,但是网上的知识太多了,而且都很详细,就没弄了,这里大致简单明了的说几句: 第一.漏洞产生的原因 这个漏洞导致的原因主要是因为Android中WebView中的JS访问本地方法的方式存在缺陷,我们做过交互的都知

Android中WebView获取网页中标题 ,内容, 图片的方法

如题,在Android中WebView获取网页中标题 ,内容, 图片的方法 首先是获取标题,在new WebChromeClient(){}中重写onReceivedTitle()方法 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); // loge.e("__页面标题__"+title); } 获取内容,是参考的这边的 http

Android中webview和js之间的交互(转)

http://www.cnblogs.com/leizhenzi/archive/2011/06/29/2093636.html 1.android中利用webview调用网页上的js代码. Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示: mWebView.getSettings().setJavaScriptEnabled(true); mWebV

Android:WebView与Javascript交互(相互调用参数、传值)

Android中可以使用WebView加载网页,同时Android端的java代码可以与网页上的javascript代码之间相互调用. 效果图: (一)Android部分: 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_widt

Android中Webview使用javascript调用事先定义好的Java函数

1. 首先定义好一个类,专们用于给javascript调用 public class JavaScriptInterface { // share your news public void share(String newsImageUrl, String newsTitle, String newsUrl) { Intent intent = new Intent(ActivityHomeRang.this, ActivityShare.class); Bundle news = new B

[Android] 在WebView的页面中直接使用res中的图片

WebView页面中使用res中图片的方法: <img id="img" src="file:///android_res/drawable/ic_launcher.png" /> 附测试页面: <!doctype html> <html> <head> <meta charset="utf-8"> <script type="text/javascript"&

一处疑难杂症的术后总结:WebView和JavaScript之间的交互

最近在公司里参与了M3项目的开发,这个项目是使用HTML5开发的前端页面,在开发完毕后,把项目地址写入Android.iOS的壳源码里面,这样当应用被打开时候自动载入项目首页的URL.这种做法对于用户来说,可以不用更新客户端,对于开发人员来说,发现问题可以及时修复并更新,当然这也是B/S软件的优点. 在这个APP里面是有个拨号功能的,即点击界面上的电话小图标,可以直接通过手机拨出号码.昨天同事丁丁告知我们这个APP有个BUG:在iOS里面拨号是没有问题的,但是在Android里面拨号时,会跳转到

Android 利用webview开发webApp和本地交互出现的一个问题

问题是: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same 我英语不好看不太懂,大致的了解了下原因. 之前我的代码是这样. 1 @JavascriptInterface 2 public void needLogin(String username,String password) { 3 if (username.equals("abc"