1
有一種方法可以從webview調用javascript函數,然後讓它調用Java中的方法返回結果。如How to get return value from javascript in webview of android?中所述從Javascript *可靠*返回值到Webview
現在,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通話完成了」的方法?
如果javascript函數失敗並setEventHandled()不會被調用,我要運行一些故障代碼(如圖問題)。這個回答只會阻止等待javascript調用成功,不是? – tarkeshwar 2011-06-01 19:03:21
超時使用'block'方法。 – Michael 2011-06-01 19:07:54