按下返回按钮

时间:2018-07-03 08:42:33

标签: android webview back

我有一个具有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");
    }
}

如果您不明白我说的话,请参见下面的图片。

Before press back

After press back

1 个答案:

答案 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字符串返回到的方法:

  1. 获取页面中的所有表单。
  2. 遍历它们。
  3. 循环浏览每个表单的元素。
  4. 将其值设置为(其旧值-最后一个字符)。

JS

您可以像这样在WebView方法中运行该脚本:

public void run(final String script) { 
      mWebView.post(new Runnable() {
          @Override
          public void run() { 
              mWebView.loadUrl("javascript:" + script); 
          }
      }); 
}

这是MCVE

添加到清单:

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" />

结果

Test