我有一个像这样的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'
的原因。在某些设备上它工作正常,但在其他设备上它没有。可能是什么问题?
答案 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);
}
}
}