Android webview JavascriptInterface没有方法

时间:2018-04-12 10:20:04

标签: javascript android webview

我有一个像这样的Javascript界面​​:

class JsInterface {
    @JavascriptInterface
    void onSendRequest(String url, String request, String response) {
        if (listener != null) {
            listener.onRequest(url, request, response);
        }
    }
}

在网页视图中我做

addJavascriptInterface(new JsInterface(), "JsInterface");
getSettings().setJavaScriptEnabled(true);
setWebChromeClient(new WebChromeClient());

然而,当我查看谷歌检查并输入window.JsInterface时,它只输出空对象。这就是我尝试执行方法时遇到错误TypeError: Object [object Object] has no method 'onSendRequest'的原因。在某些设备上它工作正常,但在其他设备上它没有。可能是什么问题?

1 个答案:

答案 0 :(得分:0)

根据文件

  

警告:如果您已将targetSdkVersion设置为17或更高,必须将@JavascriptInterface注释添加到您希望JavaScript可用的任何方法(该方法也必须公开)。如果您未提供注释,则在Android 4.2或更高版本上运行时,您的网页无法访问该方法。

我对Java不是100%肯定,但通常默认情况下方法是私有的。

参考 https://developer.android.com/guide/webapps/webview.html#BindingJavaScript

所以对你来说这是

class JsInterface {
    @JavascriptInterface
   public void onSendRequest(String url, String request, String response) {
        if (listener != null) {
            listener.onRequest(url, request, response);
        }
    }
}