使用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(" <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`中实现表单提交和文件上传,并探讨兼容Android 5.0(API级别21)及以上的策略。 首先,让我们了解`webView`的基本用法。`WebView`是Android SDK中的一个类,它可以加载HTML、CSS和...
WebView不仅能够展示静态的HTML页面,还能处理动态内容,如JavaScript交互、表单提交,甚至包括视频播放。本文将深入探讨如何在WebView中加载网页并播放HTML5视频,以及涉及到的相关技术点。 首先,我们需要理解...
此外,需要注意的是,由于跨域安全策略,JavaScript不能直接操作本地文件系统,因此通常会将HTML、CSS和JavaScript资源打包成一个本地的Asset文件夹,通过Webview加载。 总结一下,这个"android demo"主要涉及以下...
要使用WebView,你需要在XML布局文件中添加一个WebView元素,并在Java代码中通过 findViewById 获取这个视图对象。接着,你可以调用 `loadUrl` 方法来加载网页。对于本地HTML文件,URL应以 "file://" 开头,后面接上...
WebView不仅能够加载HTML页面,还支持JavaScript执行、表单提交、页面加载进度跟踪等多种功能。当我们需要从WebView中获取HTML源码时,通常是因为我们需要对网页内容进行分析、处理或者离线存储。以下将详细介绍如何...
3. 设置WebView的基本配置,如加载网页数据的来源、启用JavaScript支持、设置网页缩放等。 4. 加载HTML内容。可以是远程URL,也可以是本地资源或者直接的HTML字符串。 对于这个“TestHtmlMod”示例,可能包含的文件...
2. **JavaScript交互**: iOS的WebView支持与JavaScript代码的交互,通过`WKWebView`的`evaluateJavaScript:`方法,我们可以执行任意JavaScript代码并获取其结果。 3. **拦截点击**: 在这个场景下,我们需要监听百度...
在用户选择图片后,表单会被提交,此时需要在服务器端接收并处理上传的图片。服务器端的代码(如Java Servlet或Node.js)需要解析HTTP请求,读取上传的文件内容,并将其保存到服务器上。具体实现取决于服务器使用的...
在这个场景中,我们要探讨的是如何通过WebView加载网页并实现查看和下载网页中的所有图片。 首先,我们需要在AndroidManifest.xml文件中为我们的应用添加INTERNET权限,这是加载网页的必要条件: ```xml ``` 接...
在Android开发中,WebView是一个非常...通过以上这些方法,Android开发者可以实现WebView与JavaScript的深度交互,从而构建功能丰富的混合式应用。在实际项目中,根据需求可以选择不同的交互方式,灵活运用这些技术。
在Android开发中,WebView是一个非常...通过深入学习,你可以实现更多高级功能,如注入JavaScript、处理表单提交、实现离线缓存等。这个简单的程序和易懂的概念将帮助你快速入门,为以后的Android开发打下坚实基础。
这里,我们添加了一个表单,当用户点击登录按钮时,阻止表单的默认提交行为,而是通过JavaScript调用`window.android.onLogin()`方法,这个方法是在Android端定义的JavaScript接口。 为了实现JavaScript与Android的...
这通常涉及到混合应用的开发,比如使用WebView加载HTML页面,并通过JavaScript接口与Android原生代码进行通信。以下将详细介绍如何实现这一功能。 首先,我们创建一个WebView来加载包含表单的HTML页面。WebView是...
10. **权限管理**: 自Android 6.0(API级别23)起,部分权限需要在运行时请求,比如INTERNET权限对于WebView加载网页是必需的。确保在应用中适当地请求和管理这些权限。 HTML5WebView源码的分析可以帮助我们理解其...
在Android开发中,实现一个简单的Web提交表单登录功能,主要涉及到WebView组件的使用,以及JavaScript接口的交互。WebView是Android系统内置的一个组件,它能够加载并显示网页内容,为移动应用提供了内置浏览器的...
为了提高用户体验,确保处理WebView加载失败的情况。可以监听`WebChromeClient`的`onProgressChanged`回调来显示加载进度,或使用`WebClientClient`的`onReceivedError`来处理加载错误。 9. **权限请求** 如果你...
WebView不仅能够加载HTML、CSS和JavaScript,还能通过JavaScript与Android原生代码进行交互,极大地拓展了应用的功能。本文将深入探讨“兼容多种功能的WebView”,特别是其支持JavaScript以及上传图片的能力。 首先...
除了基本的页面加载功能,`WebView`还提供了丰富的API,支持与JavaScript的双向通信、页面加载监听、资源加载控制等功能,允许开发者实现更为复杂的应用逻辑,如动态内容生成、表单提交、数据同步等。 #### 结语 `...
本话题将深入探讨“webview内置app”的开发,包括如何利用WebView加载HTML5页面、集成百度SDK进行定位、以及通过JavaScript与Java交互实现图片上传和录音功能。 一、WebView基础 1. WebView组件:WebView是Android ...
通常,我们可以添加一个自定义的全屏按钮,并通过JavaScript与Java代码进行交互,触发全屏模式。 在JavaScript层面,我们可以为`<video>`元素添加事件监听器,当用户点击全屏按钮时,调用`requestFullscreen()`方法...