I have an android app that consists of a webview. It needs to allow users to fill in a form on a webpage and then change the data of the form after the user has clicke开发者_运维问答d submit
on the form. The form will use the POST request method.
So my question is, how can I intercept the POST data from the form, change it's values, then send it along?
For example: If there's a web form like this...
<form action="http://www.example.com/do.php" method="post">
<input type="text" name="name" />
<input type="text" name="email" />
<input type="submit" />
</form>
If the user enters name = Steve and email = steve@steve.com in the form, I want to change the values to name = bob and email = bob@bob.com in the android app and have the new POST be sent to http://www.example.com/do.php
.
Thanks for your help!
If you are familiar with JavaScript, I would suggest you use JavaScript. I think it's more convenient and easy. This tour tells you how to use JavaScript in a WebView.
I wrote a library with a special WebViewClient that offers a modified shouldOverrideUrlLoading
where you can have access to post data.
https://github.com/KonstantinSchubert/request_data_webviewclient
Unfortunately, my implementation works for XMLHttpRequest (AJAX) requests only. But somebody else drafted already how this would be done for form data: https://github.com/KeejOow/android-post-webview
Between the two repositories, you should be able to find your answer :)
if you are submitting the form using postUrl() method then you can override the postUrl method in your WebView object like this.
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);
I liked the suggestion for public void postUrl(String url, byte[] postData) , but unfortunately it did not work for me.
My solution for just intercepting the POST request:
- have a WebViewClient subclass that is set for WebView
- override public void onPageStarted(WebView view, String url, Bitmap favicon) to examine the request data and act accordingly (as per requirements)
Code excerpt & additional thoughts here: https://stackoverflow.com/a/9493323/2162226
overriding onPageStarted
callback in your WebView
I think you can use shouldInterceptRequest(WebView view, String url)
method of WebViewClient, but it is supported in the API's later than 11.
精彩评论