在SDK 19中,Android的WebView添加了
Android文档引用如下:
如果非空,则会使用任何从该执行返回的结果调用resultCallback。
我按照下面的方法使用这个方法,但是我的回调没有被调用。我可以从调试中看到
在调用
代码:
请在https://github.com/bashok001/TestApp找到此问题的示例。
evaluateJavascript(String script, ValueCallback<String> resultCallback)
方法。Android文档引用如下:
如果非空,则会使用任何从该执行返回的结果调用resultCallback。
我按照下面的方法使用这个方法,但是我的回调没有被调用。我可以从调试中看到
evaluateJavascript()
被调用,但在Android API 19、20和21中,回调没有被调用。从API 22(LOLLIPOP_MR1)开始,一切都按预期工作。在调用
evaluateJavascript()
之前调用webview.loadURL("")
可以使其在所有API级别上正常工作。我想知道为什么,并且如果有人能够解释/分享任何相关链接,我将不胜感激。如果我能理解原因,我想看看是否可以避免调用loadURL()
。还有另一个无关的问题,使得loadURL()
成为不可取的解决方案。代码:
private void webViewTest() {
WebView webview = new WebView(this);
webview.getSettings().setJavaScriptEnabled(true);
Log.d("TEST", "BEFORE"); // LOGGED
// webview.loadUrl(""); // Enabling this makes it work on all Android versions
webview.evaluateJavascript("(function(){return 'test'})()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("TEST", "From JS: " + s); // NEVER LOGGED on API 19-21
}
});
Log.e("TEST", "AFTER"); // LOGGED
}
runOnUiThread(new Runnable() {
@Override
public void run() {
webViewTest();
}
});
请在https://github.com/bashok001/TestApp找到此问题的示例。
loadData()
或loadDataWithBaseURL()
代替。 - Morrison Changload...()
方法,就会破坏另一个功能。因此,我想了解为什么调用load...()
可以使它在19、20、21中全部工作。 - Ashok Bommisetti