Android-android webview 有获取到表单提交数据吗?

Android-android webview 有获取到表单提交数据吗?

浮生未歇 发布于 2017-04-17 字数 154 浏览 1133 回复 1

android webview 有获取到表单提交数据吗?,最近在做webview的项目,需要截获post表单提交的数据,但是是android查了很久都不行?请问各位大侠有什么思路没?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想挽留 2017-05-13 1 楼

这里有个简单的demo可以看下,重点是用window.loginImpl.login(username, password)用来提交表单传递参数。

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();
}
}