Android 按“后退”按钮时删除webview上文本区域中的字符
我有一个android应用程序,其中有一个webview。当我按下android上的“后退”按钮时,我如何才能删除网络视图Android 按“后退”按钮时删除webview上文本区域中的字符,android,webview,back,Android,Webview,Back,我有一个android应用程序,其中有一个webview。当我按下android上的“后退”按钮时,我如何才能删除网络视图 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 Ma
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");
}
}
如果你不明白我说的话,请看下面的图片
不能保证用户加载的页面中只有一个
表单
但是,如果特别是针对Google
搜索表单,则可以执行JavaScript
以在Google.com
页面中获得表单,该表单具有id=tsf
(这是Google.com
中搜索表单的唯一id)
然而,你在评论中提到:
这将发生在所有其他页面上
除非您知道页面中表单的id
(这对于WWW
中包含多个表单的每个页面几乎是不可能的)。
您可以循环浏览所有表单
,并删除表单
中文本类型的输入
中最后一个字符
例子
首先创建一个方法来运行JS
脚本(请注意,在Android的WebView
中有不同的方法来执行JS
,如果以下方法不适用于您,请查看):
然后创建一个方法,将JS字符串返回给:
获取页面中的所有表单
循环浏览它们
循环浏览每个表单的元素
将其值设置为(其旧值-最后一个字符)
这是:
添加到清单:
<uses-permission android:name="android.permission.INTERNET" />
活动中的执行:
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.support.v7.app.app活动;
导入android.os.Bundle;
导入android.webkit.WebView;
公共类MainActivity扩展了AppCompatActivity{
私有网络视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
mWebView=findViewById(R.id.webView1);
mWebView.getSettings().setJavaScriptEnabled(true);//启用JS
mWebView.loadUrl(“https://www.google.com");
}
/**
*异步执行JS字符串
*@param脚本
*/
公共无效运行(最终字符串脚本){
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.KITKAT){
//异步运行JavaScript
//它可以在KitKat之后工作
evaluateJavascript(脚本,null);
}否则{
//使用不同的线程异步运行JavaScript
//因为evaluateJavascript不适用于KitKat之前的版本
新线程(newrunnable()){
@凌驾
公开募捐{
mWebView.post(新的Runnable(){
@凌驾
公开募捐{
loadUrl(“javascript:+脚本”);
}
});
}
}).start();
}
}
/**
*这个JS脚本将遍历所有
*页面中所有形式的输入
*并从每个文件中删除最后一个字符
*@返回
*/
私有字符串deleteLastCharScript(){
return“var listOfForms=document.forms;\n”+
“对于(var i=0;i
结果
您的意思是:使用搜索框中的上一个文本返回上一页吗?不,我的意思是:按后退按钮>删除文本区域(搜索框)中的字符(e),而不是返回上一页。(这就像按下软键盘上的删除按钮)如果你有一个google.com以外的页面,你想要同样的行为吗。。。因为根据您的评论,“后退”按钮将作为单个字符删除器工作。。。。你能详细说明你为什么想要达到这个目标吗?这将发生在所有其他页面上。我需要在android电视应用程序中按下遥控器上的后退按钮。这与我上面描述的类似
@Override
public void onBackPressed() {
run(deleteLastCharScript());
}
<uses-permission android:name="android.permission.INTERNET" />
<?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());
}
}