将信息JavaScript发送到Android(网络视图)

Sending info JavaScript to Android (webview)

本文关键字:网络 视图 Android 信息 JavaScript      更新时间:2023-09-26

我的源代码有问题,我已经编写了一个javascript函数,通过一个简单的按钮将其激活到HTML页面中。

代码如下:

<html>
    <head>
        <base href="http://localhost:8080/testAndroidReturn/" target="_blank">
    </head>
    <body>
        <div class="col-md-6 col-md-offset-3">
            <div class="panel panel-primary">
                <div class="panel-heading">
                    <div class="panel-title">
                        <h4>teste android</h4>
                    </div>
                </div>
                <div class="panel-body">
                    <input type="text" id="text" value="" />
                    <button type="submit" onclick="saveText()"> submit </button>
                </div>
            </div>
        </div>
        <script type="text/javascript">
            function saveText(){
                alert("coucou");
                AndroidFunction.showToast("COUCOU");
            }
        </script>
    </body>
</html>

我在安卓系统中写了一个项目,在主要活动中我写了这个:

package com.bepark.myapplication.app;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.Toast;
public class MainActivity extends Activity {
    private WebView mWebView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.activity_main_webview);
        final MyJavaScriptInterface myJavaScriptInterface
                = new MyJavaScriptInterface(this);
        mWebView.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.loadUrl("http://10.10.202.184:8080/testAndroidReturn/");
    }
    public class MyJavaScriptInterface {
        Context mContext;
        MyJavaScriptInterface(Context c) {
            mContext = c;
        }
        public void showToast(String toast){
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
        public void openAndroidDialog(){
            AlertDialog.Builder myDialog
                    = new AlertDialog.Builder(MainActivity.this);
            myDialog.setTitle("DANGER!");
            myDialog.setMessage("You can do what you want!");
            myDialog.setPositiveButton("ON", null);
            myDialog.show();
        }
    }
}

但是,当我启动我的android应用程序并点击按钮中的WebView时,它什么也不做,日志中有这样的错误消息:

04-16 04:24:14.458    1212-1212/com.bepark.myapplication.app I/Choreographer﹕ Skipped 148 frames!  The application may be doing too much work on its main thread.
04-16 04:24:14.578    1212-1212/com.bepark.myapplication.app I/chromium﹕ [INFO:CONSOLE(22)] "Uncaught TypeError: Object [object Object] has no method 'showToast'", source: http://10.10.202.184:8080/testAndroidReturn/ (22)

我不明白为什么?

如果您的目标是Jelly Bean操作系统,请尝试将注释@JavascriptInterface添加到您的公共方法中。

希望能有所帮助。