我有一个包含webview的Android应用程序。它需要允许用户在网页上填写表单,然后在用户单击表单上的submit
后更改表单的数据。表单将使用POST请求方法。
所以我的问题是,如何拦截表单中的POST数据,更改它的值,然后将其发送?
例如:如果有这样的网络表单......
<form action="http://www.example.com/do.php" method="post">
<input type="text" name="name" />
<input type="text" name="email" />
<input type="submit" />
</form>
如果用户在表单中输入name = Steve和email = steve@steve.com,我想在android应用程序中将值更改为name = bob和email = bob@bob.com并将新的POST更改为已发送至http://www.example.com/do.php
。
感谢您的帮助!
答案 0 :(得分:3)
如果您熟悉JavaScript,我建议您使用JavaScript。我认为它更方便,更容易。 This tour告诉您如何在WebView中使用JavaScript。
答案 1 :(得分:2)
如果您使用postUrl()方法提交表单,那么您可以像这样覆盖WebView对象中的postUrl方法。
WebView mWebView = new WebView(this){
@Override
public void postUrl(String url, byte[] postData)
{
System.out.println("postUrl can modified here:" +url);
super.postUrl(url, postData);
}};
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
linearLayout.addView(mWebView);
答案 2 :(得分:1)
我写了一个带有特殊WebViewClient的库,它提供了一个修改后的shouldOverrideUrlLoading
,您可以访问该帖子数据。
https://github.com/KonstantinSchubert/request_data_webviewclient
不幸的是,我的实现仅适用于XMLHttpRequest(AJAX)请求。但其他人已经起草了如何对表单数据执行此操作:https://github.com/KeejOow/android-post-webview
在两个存储库之间,您应该能够找到答案:)
答案 3 :(得分:-2)
我喜欢 public void postUrl(String url,byte [] postData)的建议,但遗憾的是它对我不起作用。
我的解决方案只是拦截了POST请求:
代码摘录&amp;其他想法:https://stackoverflow.com/a/9493323/2162226
答案 4 :(得分:-3)
覆盖onPageStarted
WebView
回调
答案 5 :(得分:-5)
我认为您可以使用WebViewClient的shouldInterceptRequest(WebView view, String url)
方法,但API的支持时间晚于11。