2015-09-30 18 views
0

我們如何從Java調用JavaScript函數?例如,我有在www/js/app.js中的sayHello函數。我需要用java編寫一個方法來調用這個sayHello並使用cordova返回結果。Cordova通過Java調用JavaScript函數而無需webview

sayHello: function(name) { 
    return "Hello "+name; 
} 
+0

你想要的是不可能的,你需要webview來執行javascript。它不是必須的,但你必須用它來執行javascript – jcesarmobile

+0

@jcesarmobile - cordova創建一個webview,所以有一個可以使用。問題是如何真正實現這一目標。 – Jules

回答

0

試試這個

//method to exec javascript 
private static synchronized void executeJavascript(final String strJS, CordovaWebView myWebView) { 

    Runnable jsLoader = new Runnable() { 
     public void run() { 
      myWebView.loadUrl("javascript:" + strJS); 
     } 
    }; 
    try { 
     Method post = myWebView.getClass().getMethod("post",Runnable.class); 
     post.invoke(myWebView,jsLoader); 
    } catch(Exception e) { 
     ((Activity)(myWebView.getContext())).runOnUiThread(jsLoader); 
    } 
} 

假設你有一個類

public class MyCordovaPlugin extends CordovaPlugin 

你將有一個方法

@Override 
public void initialize (CordovaInterface cordova, CordovaWebView webView) { 
     //and call your method 
     executeJavascript("sayHello('bear')", webView); 
} 
+0

你的executeJavascript方法需要2個參數,你只發送一個,那麼你如何獲得webview呢? – jcesarmobile

+0

編輯我的答案。您可能想看看如何創建Cordova插件。 – MegaAppBear

+0

我知道如何創建科爾多瓦插件,只是想讓你知道你的答案是錯誤的。這似乎更好 – jcesarmobile

0

最後我得到了。

我們需要創建java腳本接口來回調給java。這是我的完整代碼。

webView.addJavascriptInterface(mActivity, "callBack"); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl("javascript: sayHello('yourName')); 

@JavascriptInterface 
public void helloResult(String value) { 
    Log.v("Result",name); 
} 

和腳本。

sayHello: function(name) { 
    callBack.helloResult("Hello "+name); 
}