Ответ 1
Если вы знакомы с JavaScript, я бы предложил вам использовать JavaScript. Я думаю, что это более удобно и легко. Этот тур рассказывает вам, как использовать JavaScript в WebView.
У меня есть приложение для Android, которое состоит из webview. Он должен разрешить пользователям заполнять форму на веб-странице, а затем изменять данные формы после того, как пользователь нажал 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>
Если пользователь вводит имя = Steve и email = [email protected] в форме, я хочу изменить значения name = bob и email = [email protected] в приложении Android и получить новый POST отправлено на http://www.example.com/do.php
.
Спасибо за вашу помощь!
Если вы знакомы с JavaScript, я бы предложил вам использовать JavaScript. Я думаю, что это более удобно и легко. Этот тур рассказывает вам, как использовать JavaScript в WebView.
если вы отправляете форму с помощью метода postUrl(), тогда вы можете переопределить метод postUrl в объекте WebView следующим образом.
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);
Я написал библиотеку со специальным WebViewClient, который предлагает измененный shouldOverrideUrlLoading
, где вы можете получить доступ к сообщениям post.
https://github.com/KonstantinSchubert/request_data_webviewclient
К сожалению, моя реализация работает только для запросов XMLHttpRequest (AJAX). Но кто-то еще разработал, как это будет сделано для данных формы: https://github.com/KeejOow/android-post-webview
Между двумя репозиториями вы сможете найти свой ответ:)
Мне понравилось предложение public void postUrl (String url, byte [] postData), но, к сожалению, это не сработало для меня.
Мое решение для простого перехвата запроса POST:
Выдержка из кода и дополнительные мысли здесь: fooobar.com/questions/224696/...
переопределение onPageStarted
обратного вызова в WebView
Я думаю, вы можете использовать метод shouldInterceptRequest(WebView view, String url)
для WebViewClient, но он поддерживается в API позже 11.