`
zweichxu
  • 浏览: 134646 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

WebView加载HTML表单并通过javascript提交

阅读更多

使用android的WebView控件加载HTML表单,通过javascript调用java对象提交表单,在java对象中获取表单的值:

 
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler; 
import android.view.View;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.TextView;

public class WebViewTest extends Activity {
    private WebView mWebView = null;
    private TextView txtView = null;
    private Handler mHandler = new Handler();  
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mWebView = (WebView) findViewById(R.id.webView);  
        txtView = (TextView) findViewById(R.id.webViewResult);  
        
        WebSettings webSettings = mWebView.getSettings();
      //不保存密码
        webSettings.setSavePassword(false);  
      //不保存表单数据
        webSettings.setSaveFormData(false);  
        webSettings.setJavaScriptEnabled(true); 
      //不支持页面放大功能
        webSettings.setSupportZoom(false); 
        
        mWebView.addJavascriptInterface(new LoginJavaScriptImpl(), "loginImpl");
        mWebView.setWebChromeClient(new MyAndroidWebClient());
        ((Button)findViewById(R.id.btnLoadhtml)).setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                mWebView.loadData(createWebForm(), "text/html", "UTF-8");
                // mWebView.loadDataWithBaseURL("", createWebForm(), "text/html", "UTF-8", "");
            }
        });
    }
     
    private String returnValue;
    protected final class LoginJavaScriptImpl { 
        public void login(String username, String password){
            returnValue = username + ": " + password; 
             
            mHandler.post(new Runnable() { 
                public void run() {
                    txtView.setText(returnValue);
                }
            }); 
        }
    }
    
    private final class MyAndroidWebClient extends WebChromeClient {
        @Override
        public boolean onJsAlert(WebView view, String url, String message,
                JsResult result) {
            new AlertDialog.Builder(WebViewTest.this)
                    .setTitle("提示信息")
                    .setMessage(message)
                    .setPositiveButton("确定",
                            new DialogInterface.OnClickListener() {
                                public void onClick(
                                        DialogInterface dialoginterface, int i) {
                                }
                            }).show();

            return true;
        }
    }
    
    private String createWebForm(){
        StringBuffer sb = new StringBuffer();
        sb.append("<html>").append("<head>");
        sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>");
        sb.append("<title>").append("表单测试").append("</title>");
        sb.append("</head><script language=\"javascript\">");
        sb.append("function checkform(){var username=document.loginForm.username.value;");
        sb.append("var password=document.loginForm.password.value;");
        sb.append("if(username==\"\"){alert(\"用户名不能为空!\"); return false;}");
        sb.append("if(password==\"\"){alert(\"密码不能为空!\"); return false;}");
        //sb.append("return username + \":\" + password;"); 
        sb.append("window.loginImpl.login(username, password)");
        sb.append("}");
        sb.append("</script>");
        sb.append("<body>");
        sb.append("<form method=\"post\" name=\"loginForm\">");
        sb.append("<table>");
        
        sb.append("<tr>");
        sb.append("<td align=\"right\">").append("用户名").append("</td>");
        sb.append("<td").append("<input type=\"text\" name=\"username\">").append("</td>"); 
        sb.append("</tr>");

        sb.append("<tr>");
        sb.append("<td align=\"right\">").append("密    码").append("</td>");
        sb.append("<td").append("<input type=\"password\" name=\"password\">").append("</td>"); 
        sb.append("</tr>");
        
        sb.append("<tr>");
        sb.append("<td align=\"center\" colspan=\"2\">");
        sb.append("<input type=\"submit\" value=\"登录\" onclick=\"checkform();\">");
        sb.append("&nbsp;&nbsp;<input type=\"reset\" value=\"重置\">").append("</td>"); 
        sb.append("</tr>");
        
        sb.append("</table>");
        sb.append("</form>");
        sb.append("</body>");
        sb.append("</html>");
        
        return sb.toString();
    } 
}
 

在手机模拟器加载的表单页面:

在创建的HTML页面代码的javascript代码中,有window.loginImpl.login(username, password)用来提交表单传递参数。其中loginImpl为java代码中自定义的接口的名称:

        mWebView.addJavascriptInterface(new LoginJavaScriptImpl(), "loginImpl");

 

MyAndroidWebClient类这里的作用主要是用来显示表单校验提示信息。

 

----------------------------------------------------------------------------------------------------------

初学,才知道LogCat视图中无法显示中文,刚开始不知道LogCat里无法显示中文,我还以为提交表单后后台java里获取到的汉字为乱码,感谢朋友的提醒!

分享到:
评论

相关推荐

    webView表单提交

    本文将详细讲解如何在`webView`中实现表单提交和文件上传,并探讨兼容Android 5.0(API级别21)及以上的策略。 首先,让我们了解`webView`的基本用法。`WebView`是Android SDK中的一个类,它可以加载HTML、CSS和...

    webView加载网络播放视频

    WebView不仅能够展示静态的HTML页面,还能处理动态内容,如JavaScript交互、表单提交,甚至包括视频播放。本文将深入探讨如何在WebView中加载网页并播放HTML5视频,以及涉及到的相关技术点。 首先,我们需要理解...

    android demo,java从webview中的h5中的JavaScript函数的取值

    此外,需要注意的是,由于跨域安全策略,JavaScript不能直接操作本地文件系统,因此通常会将HTML、CSS和JavaScript资源打包成一个本地的Asset文件夹,通过Webview加载。 总结一下,这个"android demo"主要涉及以下...

    安卓浏览器WebViewJSHTML5相关-androidwebview加载本地html.zip

    要使用WebView,你需要在XML布局文件中添加一个WebView元素,并在Java代码中通过 findViewById 获取这个视图对象。接着,你可以调用 `loadUrl` 方法来加载网页。对于本地HTML文件,URL应以 "file://" 开头,后面接上...

    webview获取HTML源码

    WebView不仅能够加载HTML页面,还支持JavaScript执行、表单提交、页面加载进度跟踪等多种功能。当我们需要从WebView中获取HTML源码时,通常是因为我们需要对网页内容进行分析、处理或者离线存储。以下将详细介绍如何...

    修改html并用webView展示的demo

    3. 设置WebView的基本配置,如加载网页数据的来源、启用JavaScript支持、设置网页缩放等。 4. 加载HTML内容。可以是远程URL,也可以是本地资源或者直接的HTML字符串。 对于这个“TestHtmlMod”示例,可能包含的文件...

    IOS WebVIew 获取百度搜索框内容

    2. **JavaScript交互**: iOS的WebView支持与JavaScript代码的交互,通过`WKWebView`的`evaluateJavaScript:`方法,我们可以执行任意JavaScript代码并获取其结果。 3. **拦截点击**: 在这个场景下,我们需要监听百度...

    webView选择图片并上传

    在用户选择图片后,表单会被提交,此时需要在服务器端接收并处理上传的图片。服务器端的代码(如Java Servlet或Node.js)需要解析HTTP请求,读取上传的文件内容,并将其保存到服务器上。具体实现取决于服务器使用的...

    WebView加载网页可查看网页中的所有图片并下载保存

    在这个场景中,我们要探讨的是如何通过WebView加载网页并实现查看和下载网页中的所有图片。 首先,我们需要在AndroidManifest.xml文件中为我们的应用添加INTERNET权限,这是加载网页的必要条件: ```xml ``` 接...

    Android笔记webview与js交互

    在Android开发中,WebView是一个非常...通过以上这些方法,Android开发者可以实现WebView与JavaScript的深度交互,从而构建功能丰富的混合式应用。在实际项目中,根据需求可以选择不同的交互方式,灵活运用这些技术。

    webView实现加载显示网页

    在Android开发中,WebView是一个非常...通过深入学习,你可以实现更多高级功能,如注入JavaScript、处理表单提交、实现离线缓存等。这个简单的程序和易懂的概念将帮助你快速入门,为以后的Android开发打下坚实基础。

    Android使用Html实现登录功能——重点掌握Webview js的使用

    这里,我们添加了一个表单,当用户点击登录按钮时,阻止表单的默认提交行为,而是通过JavaScript调用`window.android.onLogin()`方法,这个方法是在Android端定义的JavaScript接口。 为了实现JavaScript与Android的...

    android获取html表单数据

    这通常涉及到混合应用的开发,比如使用WebView加载HTML页面,并通过JavaScript接口与Android原生代码进行通信。以下将详细介绍如何实现这一功能。 首先,我们创建一个WebView来加载包含表单的HTML页面。WebView是...

    html5webview

    10. **权限管理**: 自Android 6.0(API级别23)起,部分权限需要在运行时请求,比如INTERNET权限对于WebView加载网页是必需的。确保在应用中适当地请求和管理这些权限。 HTML5WebView源码的分析可以帮助我们理解其...

    Android简单的web提交表单登录

    在Android开发中,实现一个简单的Web提交表单登录功能,主要涉及到WebView组件的使用,以及JavaScript接口的交互。WebView是Android系统内置的一个组件,它能够加载并显示网页内容,为移动应用提供了内置浏览器的...

    android的webView的登录实例

    为了提高用户体验,确保处理WebView加载失败的情况。可以监听`WebChromeClient`的`onProgressChanged`回调来显示加载进度,或使用`WebClientClient`的`onReceivedError`来处理加载错误。 9. **权限请求** 如果你...

    兼容多种功能的WebView

    WebView不仅能够加载HTML、CSS和JavaScript,还能通过JavaScript与Android原生代码进行交互,极大地拓展了应用的功能。本文将深入探讨“兼容多种功能的WebView”,特别是其支持JavaScript以及上传图片的能力。 首先...

    androidWebView.pdf

    除了基本的页面加载功能,`WebView`还提供了丰富的API,支持与JavaScript的双向通信、页面加载监听、资源加载控制等功能,允许开发者实现更为复杂的应用逻辑,如动态内容生成、表单提交、数据同步等。 #### 结语 `...

    webview内置app

    本话题将深入探讨“webview内置app”的开发,包括如何利用WebView加载HTML5页面、集成百度SDK进行定位、以及通过JavaScript与Java交互实现图片上传和录音功能。 一、WebView基础 1. WebView组件:WebView是Android ...

    安卓浏览器WebViewJSHTML5相关-Android--webview全屏播放HTMLvideo.rar

    通常,我们可以添加一个自定义的全屏按钮,并通过JavaScript与Java代码进行交互,触发全屏模式。 在JavaScript层面,我们可以为`&lt;video&gt;`元素添加事件监听器,当用户点击全屏按钮时,调用`requestFullscreen()`方法...

Global site tag (gtag.js) - Google Analytics