2011-07-29 29 views
1

我想知道是否有方法從android上的java調用javascript? 在我的程序中,我將java和javascript交互在一起。我使用java從TCP服務器接收響應(json數據)並將它們保存到文件中。在webview中,我使用javascript jQuery getJSON()函數來檢索該文件,並使用jQuery圖表庫來繪製圖表。現在,java和javascript之間沒有關係。每當我更新數據和文件時,我仍然需要點擊webview中的按鈕來觸發繪圖功能。我想讓這些節目變得智能和方便。這是一種從java調用或執行javascript的方式。我知道一種方法:android:從java問題的調用javascript

Button update = (Button)findViewById(R.id.update); 
     update.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       wv.loadUrl("javascript:document.write('hello')"); 
      } 
     }); 

但問題是我已經做了loadurl()索引頁。

final WebView wv = (WebView) findViewById(R.id.webkankan); 
     wv.getSettings().setJavaScriptEnabled(true); 
     wv.loadUrl("file:///android_asset/index.html"); 

當我觸發此點擊事件時,所有內容都只有一個字符串「hello」在那裏。另一件事是爲什麼我需要將webview的類型改爲final來避免eclipse錯誤。這是否是觸發我主要問題的問題?如果是這樣,我該如何解決它? 感謝您的耐心。 乾杯!

回答

1

比如你在index.html稱爲loadData()讀取您在java保存在文件中的javascript方法,那麼你可以做的是wv.loadUrl("javascript:loadData()");。這實際上是調用javascript方法,然後可以用該方法讀取文件。希望這能解決你的問題。

或簡單地說。絕對要做到這一點webView.loadUrl("javascript:jsmethodname()");從Java執行JavaScript。

+0

我dont't很瞭解要做到這一點。你能告訴我一個例子嗎? – nich

+0

你說你正在下載json並使用java將它保存到一個文件中。所以當json下載/保存到文件完成後,你可以這樣做'wv.loadUrl(「javascript:getJSON()」);'是有道理的。這非常簡單。 – Varun

+0

@Varun嗨,我嘗試你的建議,但仍然無法工作..你能幫我解決我的問題嗎?這裏是問題http://stackoverflow.com/questions/42633793/call-javascript-function-from-android-activity-class –

0

您可以嘗試與javascript通信,將java對象註冊到執行javascript的webview中。

從網頁視圖的方法addJavascriptInterface將讓你做出可用的Java對象的JavaScript範圍,這樣的事情:

WebView mWebView = new WebView(mContext); 
//... webview initialization, js enabling etc. 
MyProxyObject obj = new MyProxyObject(); //This object can interchange just basic types, but Strings are basic types 
mWebView.addJavascriptInterface(obj,"myproxyobj"); 

與該代碼你將在JavaScript的環境下,你將有一個對象'myproxyobj'實際上是一個Java對象。

請記住,您可以只交換基本類型。

欲瞭解更多信息請檢查以下網址:

http://developer.android.com/guide/webapps/webview.html

特別檢查部分:綁定的JavaScript代碼到Android代碼

乾杯, 舊金山

+0

你有問題的方式是錯誤的。他想從java調用javascript,而不是從javascript調用java。 –

+0

@GregRandall你說得對 –