2011-07-27 61 views
2

我想從我的Java Android應用程序運行一些JavaScript,但我需要它同步運行。由於loadUrl和loadData沒有返回類型,因此WebView無法完成此操作。說真的,我正在尋找的東西相當於這個在iOS上的一個UIWebView:我可以從Android上同步運行JavaScript(v2.2及以上版本)嗎?

- (NSString)stringByEvaluatingJavaScriptFromString:(NSString)script 

我用犀牛嘗試,但它是我的目的,太慢。

謝謝!

+0

「我試圖從Java運行一些JavaScript代碼...」在技術上是說法是不正確。 – Shahzeb

+0

我改變措辭更加精確。 – pho0

回答

0

是的,但你必須使用WebView.addJavaScriptInterface()

+0

這是@ brindy的答案的子集,但並不真正滿足我需要的,因爲我的目的,因爲我需要整個調用是同步java-> js-> java,就像stringByEvaluatingJavaScriptFromString:在iOS – pho0

+1

有沒有其他API除了我們的答案以外使用。 –

0

我相信它是同步的,但是,正如你正確地指出,沒有辦法從通話中返回一個值。丹暗示了一個解決方案...

首先,創建一個簡單的類像這樣(假設你的返回類型是一個String):

public class MyCallback { 

    private String returnValue; 

    public void setReturnValue(String s) { 
     returnValue = s; 
    } 

    public String getReturnValue() { 
     return returnValue; 
    } 

} 

它保持這一類的簡單是重要的,封裝,因爲如果你」從可能不可靠的來源重新載入HTML可能會給您的應用程序帶來安全漏洞。也就是說,不要試圖簡單地傳入你的Activity並直接使用Javascript調用方法。

然後執行JavaScript,你想給它回調的一個實例存儲結果:

WebView webView = // ... get this from somewhere 
MyCallback callback = new MyCallback(); 
webView.addJavaScriptInterface(callback, "callback"); 
webView.loadURL("javascript:callback.setReturnValue(someFunction())"); 
System.out.println("return value is " + callback.getReturnValue()); 
+1

這不起作用。 loadURL不同步,所以當loadURL返回時,回調的結果還沒有被設置。 – pho0

相關問題