Нет гарантии, что на странице, загруженной пользователем, будет только один Form
.
Однако, если это, в частности, Google
Форма поиска, вы можете выполнить JavaScript
, чтобы получить Form
на странице Google.com
с id=tsf
(, которая является уникальной идентификатор формы поиска в Google.com
).
Тем не менее, вы упомянули в своем комментарии:
Это произойдет со всеми остальными страницами
Если вы не знаете id
формы на странице (, что практически невозможно для каждой страницы в WWW
, содержащей более одной Form
).
Вы можете просмотреть все Forms
и удалить последние char
текста в Form
input
типа text
.
Пример
Сначала создайте метод для запуска сценария JS
( Обратите внимание, что существуют разные способы выполнения JS
в WebView
в Android, для получения дополнительной информации, если следующий метод не сработал для вас смотри здесь ):
public void run(final String script) {
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:" + script);
}
});
}
Затем создайте метод, который возвращает строку JS:
- Получить все формы на странице.
- Перебрать их всех.
- Перемещение по элементам каждой формы.
- Установите его значение (его старое значение - последний символ).
private String deleteLastCharScript() {
return "var listOfForms = document.forms;\n" +
"for(var i = 0; i < listOfForms.length; i++) {\n" +
" var elements = listOfForms[i].elements;\n" +
" for(var j = 0 ; j < elements.length ; j++){\n" +
" var item = elements.item(j);\n" +
" item.value = item.value.substring(0, item.value.length - 1);\n" +
" }\n" +
"};";
}
Вы можете запустить этот скрипт в методе onBackPressed()
следующим образом:
@Override
public void onBackPressed() {
run(deleteLastCharScript());
}
Добавить в Манифест:
<uses-permission android:name="android.permission.INTERNET" />
Создать простой WebView
Макет:
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Реализация в действии:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
mWebView = findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true); // enable JS
mWebView.loadUrl("https://www.google.com");
}
/**
* Execute JS String Asynchronously
* @param script
*/
public void run(final String script) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
// run JavaScript asynchronously
// it works on KitKat onwards
mWebView.evaluateJavascript(script, null);
}else {
// use different thread to run JavaScript asynchronously
// because evaluateJavascript doesn't work on versions before KitKat
new Thread(new Runnable() {
@Override
public void run() {
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:" + script);
}
});
}
}).start();
}
}
/**
* This JS Script tp Loop through all
* inputs in all forms in the page
* and remove last char from each
* @return
*/
private String deleteLastCharScript() {
return "var listOfForms = document.forms;\n" +
"for(var i = 0; i < listOfForms.length; i++) {\n" +
" var elements = listOfForms[i].elements;\n" +
" for(var j = 0 ; j < elements.length ; j++){\n" +
" var item = elements.item(j);\n" +
" item.value = item.value.substring(0, item.value.length - 1);\n" +
" }\n" +
"};";
}
@Override
public void onBackPressed() {
run(deleteLastCharScript());
}
}
Результат
![Test](https://i.stack.imgur.com/xnaKO.gif)