Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按“后退”按钮时删除webview上文本区域中的字符_Android_Webview_Back - Fatal编程技术网

Android 按“后退”按钮时删除webview上文本区域中的字符

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

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