簡體   English   中英

從Android上的javascript調用Java函數

[英]calling java function from javascript on android

我正在嘗試在android應用程序中的javascript和java之間建立連接,並且我能夠通過以下方式控制javascript:111111和222222填充“ gsm_num”字段,但無法在Java中調用函數“ jsmessage”。 ..i我嘗試在整個單擊功能之前移動@SuppressLint(“ JavascriptInterface”),但它無法打印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));

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM