JavaScript接口无法查找功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript接口无法查找功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1634字,纯文字阅读大概需要3分钟。
内容图文
我有一个JavaScriptInterface类,它只有一个函数.该函数使用@JavascriptInterface注释,我相信我已经正确设置了它.
public class JavaScriptInterface {
...
@JavascriptInterface
public void processBody(String uri, String body) {
Log.d(TAG, "Process body");
...
}
}
然后我在WebView上设置JavaScriptEnabled并尝试调用该函数:
final WebView webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(), "java");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
Log.d(TAG, "Page finished");
callJavaScript();
}
});
页面完成加载,然后我尝试了各种方法从JavaScriptInterface调用JavaScript函数.使用以下两种方法之一:
view.evaluateJavascript(javascript);
view.loadUrl("javascript:" + javascript);
以及其中一个javascript字符串:
"(function() { window.java.processBody('" + url + "', document.body.innerHTML); })()"
"(function() { processBody('" + url + "', document.body.innerHTML); })()"
"window.java.processBody('" + url + "', document.body.innerHTML);"
"processBody('" + url + "', document.body.innerHTML);"
每次我收到错误消息:
I/chromium: [INFO:CONSOLE(1)] "Uncaught TypeError: processBody is not a function", source: (1)
虽然在较旧的设备(前KitKat)上错误消息从未显示,但该函数永远不会被调用.
此方法以前也一直在工作,我不相信我已经更改了此活动的任何代码.我今天早上才知道这个错误.
解决方法:
正如我们已经了解到Bryan,问题是由于ProGuard剥离了未从Java调用的函数.一个快速而简单的测试是在Java中添加一些调用JS接口函数的代码,看看它是否有帮助.
有关如何配置ProGuard而不是去除已注入Java对象的方法的信息,请参阅How to configure proguard for javascript interface?
内容总结
以上是互联网集市为您收集整理的JavaScript接口无法查找功能全部内容,希望文章能够帮你解决JavaScript接口无法查找功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。