我想从android的javaclass活动中将值(String)传递给webView

时间:2016-07-14 12:03:44

标签: android html webview

这是我的MainActivity.java

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends Activity {
    JavaScriptInterface JSInterface;
    JavaScriptInterface StringGetter;
    String key;
    EditText urlField;
    ImageButton goButton;
    WebView webView;
    String url;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String key = "sending values to javascript";
        url = "file:///android_asset/Index.html";
        webView = (WebView) findViewById(R.id.webView);
        webView.setWebViewClient(new MyBrowser());
        StringGetter = new JavaScriptInterface(this);
        webView.addJavascriptInterface(StringGetter, "AndroidFunction");
        webView.getSettings().setLoadsImagesAutomatically(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(url);
    }

    public class StringGetter {
        Context jContext;
        StringGetter(Context context) {
            jContext = context;
        }
        @JavascriptInterface
        public void getString() {
            webView.loadUrl("javascript:callFromActivity('" + key + "');");
        }
    }

    private class MyBrowser extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
}

这是我的HTML文件

<!DOCTYPE html>


<html lang="en" xmlns="http://www.w3.org/1999/html">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
            <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
            <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
            <![endif]-->


    <script type="text/javascript">
        function showAndroidToast() {
            JSInterface.AlertDisplay();
        }

        function myMethod() {
            alert("Hello world");
            AndroidFunction.getString();
        }

        function callFromActivity(msg) {

            document.getElementById("btn").innerHTML = msg;
            alert(msg.anchor("val"));
        }
    </script>
</head>

<body onload="myMethod()">
    <nav class="navbar navbar-default navbar-fixed-top">

        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse" aria-expanded="false">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>

        <input type="button" id="btn" value=" Check " onClick="showAndroidToast()" />



        <a class="navbar-brand" href="#">Some Name </a>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav navbar-right">
                <li class="active"><a href="#">Home</a>
                </li>
                <li class="active"><a href="#">About</a>
                </li>
                <li class="active"><a href="#">Downloads</a>
                </li>
                <li class="active"><a href="#">Contact</a>
                </li>
                <li>
                    <div class="dropdown">
                        <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
                            Dropdown
                            <span class="caret"></span>
                        </button>
                        <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
                            <li><a href="#">Action</a>
                            </li>
                            <li><a href="#">Another action</a>
                            </li>
                            <li><a href="#">Something else here</a>
                            </li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">Separated link</a>
                            </li>
                        </ul>
                    </div>
                </li>
            </ul>
        </div>
    </nav>

    <div class="container">
        <div class="jumbotron text-center">
            <div class="container-fluid">

                <div class="row">
                    <div class="col-md-3">ColUMN 1 contains some text and other components to work with </div>
                    <div class="col-md-3">COLUMN 2 contains some text and other components to work with </div>
                    <div class="col-md-3">ColUMN 3 contains some text and other components to work with </div>
                    <p id="p">hello</p>
                </div>
            </div>
        </div>
    </div>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
</body>

</html>

我收到以下错误(没有任何更改,也没有显示警告):

  

07-14 17:22:05.808 31172-31172 / com.example.app.webview I / chromium:[INFO:CONSOLE(28)]“Uncaught TypeError:AndroidFunction.getString不是函数”,source:file :///android_asset/Index.html(28)

1 个答案:

答案 0 :(得分:0)

您的代码看起来非常适合我。请尝试从任何其他输入元素调用按钮或文本框而不是onload()调用myMethod()