Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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上从javascript调用java函数_Java_Javascript_Android_Interface_Bridge - Fatal编程技术网

在android上从javascript调用java函数

在android上从javascript调用java函数,java,javascript,android,interface,bridge,Java,Javascript,Android,Interface,Bridge,我正在尝试在android应用程序中建立javascript和java之间的连接,我能够以一种方式控制javascript,它用111111填充gsm_num字段,然后用22222填充,但它无法在java中调用函数jsmessage…我尝试在整个点击函数之前移动@SuppressLintJavascriptInterface,但它无法打印js消息。。。 有人能告诉我我做错了什么吗 @Override public void onClick(View arg0) {

我正在尝试在android应用程序中建立javascript和java之间的连接,我能够以一种方式控制javascript,它用111111填充gsm_num字段,然后用22222填充,但它无法在java中调用函数jsmessage…我尝试在整个点击函数之前移动@SuppressLintJavascriptInterface,但它无法打印js消息。。。 有人能告诉我我做错了什么吗

@Override
        public void onClick(View arg0) {

            String url = "http://www.page.com";
            wv.loadUrl(url);
            setContentView(wv);
            wv.getSettings().setJavaScriptEnabled(true);
            wv.setWebViewClient(new WebViewClient() {

                public void onPageFinished(WebView view1, String url) {

                    view1.getSettings().setJavaScriptEnabled(true);
                    view1.loadUrl("javascript: document.getElementById('gsm_num').value = '11111111'; document.forms['button'].submit();");

                    view1.setWebViewClient(new WebViewClient() {
                        @SuppressLint("JavascriptInterface")
                        @JavascriptInterface
                        public void onPageFinished(WebView view2, String url) {

                            final class JavaScriptInterface {
                                JavaScriptInterface () { }
                                public void jsmessage() {
                                    Log.e("btijs", "message");
                                }
                              }


                            view2.getSettings().setJavaScriptEnabled(true);

                            view2.addJavascriptInterface(new JavaScriptInterface(), "JSInterface");
                            view1.loadUrl("javascript: document.getElementById('gsm_num2').value = '2222222'; window.JSInterface.jsmessage();");


                         }

                    });
                }
            });
        }
    });

我认为这里有几个问题。首先,我认为您需要向WebView添加一个新的JavaScriptInterface,如下所示:

    wv.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
我认为您的JavaScript代码本身可能无法工作。实际上,您并没有将输入声明为函数。下面是我用来执行类似任务的一些代码:

    wv.loadUrl("javascript:(function() { " +
                        "window.HTMLOUT.showHTML(document.getElementById('role').innerHTML);" +
                        "})()");
其中showHTML是我在JavaScriptInterface中编写的方法

下面是我正在使用的方法中的JavaScriptInterface类:

private void Authentication(){

    class MyJavaScriptInterface {

        @JavascriptInterface
        public void showHTML(String content) {
            // grants access based on authorization level

            }
        }
    }

    // open up the login page
    final WebView wv = (WebView)findViewById(R.id.login_webview);

    wv.getSettings().setJavaScriptEnabled(true);

    wv.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");

    wv.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {

            //once page is finished loading, check id="role" pass that value to showHTML
            if(url.contains(getString(R.string.loginURL))) {
                wv.loadUrl("javascript:(function() { " +
                        "window.HTMLOUT.showHTML(document.getElementById('role').innerHTML);" +
                        "})()");

            }

        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description,
                                    String failingUrl) {
            Log.w("LoginActivity: ", description);
        }
    });

    wv.loadUrl(getString(R.string.loginURL));

}

感谢回复人…你能告诉我你是如何编写MyJavaScriptInterface的吗…现在我让js运行javascript接口,但我无法将任何值传递给java…实际上它运行java代码没有matther我在js中写的东西…这太奇怪了,但我运行了boldif document.getElementById'container.innerHTML.indexOf'xxx'!=-1{document.getElementById'gsm_num'。值='1111111';}**粗体**。在js中,它仍然将消息从java打印到logcat,并将gsm_num值设置为111111太好了…谢谢你…我按照你的例子做了…我的问题是我在onPageFinished中声明了javascript接口…需要在类的开始添加它。。。