Существует способ вызвать функцию javascript из веб-просмотра, а затем позволить ей вызвать метод в 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 будет завершен к тому времени»?