Javascript Interface Constructor вызывает, но метод интерфейса не вызывается в Android WebView - PullRequest
0 голосов
/ 27 августа 2018

Вот код, который я использовал ..

    webview.getSettings().setJavaScriptEnabled(true); // enable javascript
    webview.addJavascriptInterface(new 
         WebViewJavaScriptInterface(this), "Android");

и класс интерфейса Javascript:

открытый класс WebViewJavaScriptInterface {

    private Context context;
    WebView webView;

    /*
     * Need a reference to the context in order to sent a post message
     */
    public WebViewJavaScriptInterface(Context context){
        this.context = context;
        Log.d("Inside Interface","Hello Vinod Dirishala");
    }

    /*
     * This method can be called from Android. @JavascriptInterface
     * required after SDK version 17.
     */

    @JavascriptInterface
    public void sendDataToDevice(String usertype,String userid){
        Log.d("Inside SendData2Device","Hello Vinod Dirishala");




    }
}

Вызывается вышеупомянутый конструктор WebViewInterfaceно вызывается метод javascript sendDataToDevice, который является методом javascript, определенным в php-скрипте, например

Android.sendDataToDevice (val1, val2);

1 Ответ

0 голосов
/ 27 августа 2018

Я попробовал ваш источник, он работает хорошо.Я думаю, что проблема может быть в вашей среде.

мои шаги:

1.напишите html в (app \ src \ main \ assets \ test.html)

<html>
<script>
    function echoBack()
    {
            var txtVal1 = document.getElementById("val1").value;
            var txtVal2 = document.getElementById("val2").value;
            Android.sendDataToDevice(txtVal1, txtVal2);
    }
</script>
<body style="padding:10px;">
<br/><br/><input type="text" name="val1" id="val1" style="padding:10px;">
<br/><br/>
<br/><br/><input type="text" name="val2" id="val2" style="padding:10px;">
<br/><br/>
<input type="button" value="Send to Android" onclick="echoBack()" style="padding:10px;">
</body>
</html>

2.запись деятельности

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WebView webview = new WebView(this);

        webview.getSettings().setJavaScriptEnabled(true); // enable javascript
        webview.addJavascriptInterface(new
                WebViewJavaScriptInterface(this), "Android");

        webview.loadUrl("file:///android_asset/test.html");
        setContentView(webview);
    }

    public class WebViewJavaScriptInterface{

        private Context context;
        WebView webView;

        /*
         * Need a reference to the context in order to sent a post message
         */
        public WebViewJavaScriptInterface(Context context){
            this.context = context;
            Log.e("Inside Interface","Hello Vinod Dirishala");
        }

        /*
         * This method can be called from Android. @JavascriptInterface
         * required after SDK version 17.
         */
        @JavascriptInterface
        public void sendDataToDevice(String usertype,String userid){
            Log.e("Inside SendData2Device","Hello Vinod Dirishala");
        }
    }
}

3.журнал работ

08-27 16:04:14.436 22459-22459/com.test E/Inside Interface: Hello Vinod Dirishala
08-27 16:04:26.586 22459-22511/com.test E/Inside SendData2Device: Hello Vinod Dirishala
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...