Можно ли получить данные из HTML-форм в Android при использовании WebView?
Я делаю очень простую форму в HTML, которая просматривается в Android с помощью веб-просмотра, который вводит ваше имя с помощью текстового поля, и когда вы нажимаете на кнопку, он отображает ее в абзаце, и он сделан с использованием как HTML, так и JavaScript. Это мой HTML-код:
<!DOCTYPE html>
<html>
<body>
<p> Write your name and win your favorite game console name and win it! The winners will be announced in 4 days.</p>
Type your name here: <input id="thebox" type="text" name="value" value=""><br>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction() {
var x = document.getElementById("thebox").value;
document.getElementById("demo").innerHTML = x;
}
</script>
</body>
</html>
НОВАЯ РЕДАКТИРОВАННАЯ ФОРМА
<form name="albert" action="" method="POST">
<label for="firstname"> First Name </label>
<br /><br />
<input type="text" name="firstname" id="firstname" />
<input type="submit" name="sbumit" value="Submit" />
</form>
Я хочу получить значение из поля ввода с именем «thebox» в переменной в Android по нажатию кнопки, и я пробовал много вещей раньше, и я следовал метод, где вы вводите файл JS, но так как я ничего не знаю о JS, поэтому я не удалось это сделать, и вот файл, который я поместил в свой проект, и файл называется inject.js:
document.getElementsByTagName('form')[0].onsubmit = function () {
var objPWD, objAccount, objSave;
var str = '';
var inputs = document.getElementsByTagName('thebox');
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].name.toLowerCase() === 'thebox') {
objAccount = inputs[i];
}
}
if(objAccount != null) {
str += objAccount.value;
}
if(objPWD != null) {
str += ' , ' + objPWD.value;
}
if(objSave != null) {
str += ' , ' + objSave.value;
}
window.AndroidInterface.processHTML(str);
return true;
};
И позже, когда я следил за этой статьей, в ней говорилось, что мне нужно добавить некоторые вещи в мой MainActivity, но, поскольку я впервые использую веб-просмотр, я не мог понять многое, и вот код, который я вставил в свой MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = new WebView(this);
this.setContentView(webView);
// enable javascript
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(), "AndroidInterface");
// catch events
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
try {
view.loadUrl("javascript:" + buildInjection());
} catch (IOException e) {
e.printStackTrace();
}
}
});
webView.loadUrl("http://someurl.com");
}
Вложенный класс, который я сделал в своем MainActivity:
class JavaScriptInterface {
@JavascriptInterface
public void processHTML(String formData) {
Log.d("AWESOME_TAG", "form data: " + formData);
}
}
И, наконец, метод, который внедряет код:
private String buildInjection() throws IOException {
StringBuilder buf = new StringBuilder();
InputStream inject = getAssets().open("inject.js");// file from assets
BufferedReader in = new BufferedReader(new InputStreamReader(inject, "UTF-8"));
String str;
while ((str = in.readLine()) != null) {
buf.append(str);
}
in.close();
return buf.toString();
}
Я хочу получить значение из формы html (поле ввода), которую я показываю в веб-просмотре в Android, и возможно ли это сделать, и если да, то как и как объяснить, пожалуйста? Спасибо, а также, пожалуйста, скажите, в какой переменной я получу значение.