我有一个具有Webview的android应用程序。当我按下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");
}
}
如果您不明白我说的话,请参见下面的图片。
答案 0 :(得分:3)
不能保证用户加载的页面中只有一个Form
。
但是,如果它特别适用于Google
搜索表单,则可以执行JavaScript
以在Form
页面上获得{{1 }}(是Google.com
中搜索表单的唯一ID)。
尽管如此,您还是在评论中提到了
其他所有页面都会发生
除非您知道页面中表单的id=tsf
(,实际上Google.com
中包含多个id
的每一页都是不可能的) 。
您可以循环浏览WWW
中 的所有Form
和 删除 Forms
类型的char
。
首先创建一种运行Form
脚本的方法(请注意,在Android的input
中有多种执行text
的方法,有关以下情况的更多详细信息方法对您不起作用,请查看here ):
JS
然后创建一个将JS字符串返回到的方法:
JS
您可以像这样在WebView
方法中运行该脚本:
public void run(final String script) {
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:" + script);
}
});
}
添加到清单:
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" />