我有一个 android 应用程序,其中有一个 webview。 android 按下后退键,webview 文本区域的字符怎么删除?
package com.example.nqc.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = findViewById(R.id.mWebView);
mWebView.loadUrl("https://www.google.com");
}
@Override
public void onBackPressed() {
//delete a character
Log.d("Debug", "Delete text on TextArea");
}
}
如果你不明白我说的,请看下图。
最佳答案
不能保证用户加载的页面中只有一个Form
。
但是,如果它特别适用于 Google
搜索表单,您可以执行 JavaScript
以在 中获取
页面.Form
具有 id=tsf
(这是 Google.com
中搜索表单的唯一 ID)的 >Google.com
尽管如此,您在评论中提到:
This will happen to all other pages
除非您知道页面中表单的id
(这对于WWW
中包含多个表单的每个页面来说几乎是不可能的
)。
您可以遍历所有 Forms
并删除 text 中的最后一个 char
Form
的 input
类型为 text
。
例子
首先创建一个方法来运行JS
脚本(注意在WebView
中有不同的方式来执行JS
Android,如果以下方法对您不起作用,请查看更多详细信息 here ):
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());
}
这是MCVE :
添加到 list :
<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" />
Activity 中的实现:
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());
}
}
结果
关于android - 按下后退按钮时删除 webview 文本区域中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51150188/