【问题标题】:Javascript Interface Constructor is Calling but the interface method is not getting called in android webviewJavascript 接口构造函数正在调用,但在 android webview 中未调用接口方法
【发布时间】:2019-02-01 16:27:00
【问题描述】:

这是我使用的代码..

    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 方法正在调用,这是在 php 脚本中定义的 javascript 方法,如

Android.sendDataToDevice(val1,val2);

【问题讨论】:

    标签: android methods webview constructor


    【解决方案1】:

    我试过你的来源,效果很好。 我认为问题可能出在您的环境中。

    我的步骤是;

    1.在 (app\src\main\assets\test.html) 处写入 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 2020-10-29
      相关资源
      最近更新 更多