JavaScript 接口(interface)找不到函数

标签 javascript android android-webview chromium typeerror

我有一个只有一个函数的 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 之前)上错误消息永远不会出现,但函数永远不会被调用。

此方法之前也一直有效,我认为我没有更改此 Activity 的任何代码。我今天早上才知道这个错误。

最佳答案

正如我们与 Bryan 一起发现的那样,问题是由于 ProGuard 剥离了不是从 Java 调用的函数。一个快速简单的测试是在 Java 中添加一些调用 JS 接口(interface)函数的代码,看看是否有帮助。

有关如何配置 ProGuard 以不去除注入(inject)的 Java 对象的方法的信息,请参阅 How to configure proguard for javascript interface?

关于JavaScript 接口(interface)找不到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088387/

相关文章:

javascript - 获取 JavaScript 数组中的下一个和上一个元素

javascript - 如何从javascript中的一个线性箭头函数返回匿名对象?

java - Android Studio 无法从 'generated_java' 文件夹导入 java

android - WebView 不接受某些 cookie

Android:如何在新屏幕中打开WebView

javascript - jQuery 正则表达式 ^= 之间有数字

javascript - Jquery addClass() , removeClass() 函数不起作用

android - OpenGL 阴影贴图在对象上的阴影不正确

android - org.gradle.api.ProjectConfigurationException :A problem occurred configuring root project after updated to AndroidStudio - 3. 5.3

android - 加载数据后如何防止 ScrollView 滚动到 WebView ?