Bry*_*yan 5 javascript android typeerror chromium android-webview
我有一个JavaScriptInterface具有单一功能的类.该功能注释,@JavascriptInterface我相信我已正确设置.
public class JavaScriptInterface {
...
@JavascriptInterface
public void processBody(String uri, String body) {
Log.d(TAG, "Process body");
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在上面设置JavaScriptEnabled WebView并尝试调用该函数:
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();
}
});
Run Code Online (Sandbox Code Playgroud)
页面完成加载,然后我尝试了各种方法来调用我的JavaScript函数JavaScriptInterface.使用以下两种方法之一:
view.evaluateJavascript(javascript);
view.loadUrl("javascript:" + javascript);
Run Code Online (Sandbox Code Playgroud)
以及其中一个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);"
Run Code Online (Sandbox Code Playgroud)
每次我收到错误消息:
I/chromium: [INFO:CONSOLE(1)] "Uncaught TypeError: processBody is not a function", source: (1)
Run Code Online (Sandbox Code Playgroud)
虽然在较旧的设备(前KitKat)上错误消息从未显示,但该函数永远不会被调用.
此方法以前也一直在工作,我不相信我已经更改了此活动的任何代码.我今天早上才知道这个错误.
正如我们已经了解到Bryan,问题是由于ProGuard剥离了未从Java调用的函数.一个快速而简单的测试是在Java中添加一些调用JS接口函数的代码,看看它是否有帮助.
有关如何配置ProGuard而不是去除注入Java对象的方法的信息,请参阅如何为javascript接口配置proguard?
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |