Существует способ вызвать функцию javascript из webview, а затем разрешить ей вызвать метод в Java для возврата результата. Как описано в Как получить возвращаемое значение из JavaScript в веб-представлении Android?
Теперь функция javascript может завершиться ошибкой (скажем, из-за опечатки в файле javascript). В этом случае я хотел бы выполнить некоторый отказоустойчивый код в Java. Какой хороший способ сделать это?
Мой текущий код выглядит так:
В Java:
private boolean eventHandled = false;
@Override
public void onEvent() {
eventHandled = false;
webview.loadUrl("javascript:handleEvent()");
// Wait for JS to handle the event.
try {
Thread.sleep(500); // milliseconds
} catch (InterruptedException e) {
// log
}
if (!eventHandled) {
// run failover code here.
}
}
public final MyActivity activity = this;
public class EventManager {
// This annotation is required in Jelly Bean and later:
@JavascriptInterface
public void setEventHandled() {
eventHandled = true;
}
};
webview.addJavascriptInterface(new EventManager(), "eventManager");
В JavaScript:
function handleEvent() {
var success = doSomething();
if (success) {
eventManager.setEventHandled();
}
}
Кажется, это нормально работает для моего случая. Есть ли лучший способ, чем этот «спать некоторое время и надеяться, что к тому времени вызов Javascript завершится»?