2014-05-09 111 views
0

說我有兩個變量,x和y,我想將它們從MyActivity傳遞給JavaScript。這是我的代碼:將變量從Android Activity傳遞到JavaScript

public class myNewActivity extends Activity { 
    double x; 
    double y; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_new); 

     // get extras passed from another activity 
     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      x = extras.getDouble("x"); 
      y = extras.getDouble("y"); 
     } 

     WebView webView = (WebView)findViewById(R.id.webView); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setWebChromeClient(new WebChromeClient()); 
     //webView.loadUrl("javascript:setX('"+x+"')"); 
     //webView.loadUrl("javascript:setY('"+y+"')"); 
     webView.loadUrl("file:///android_asset/index.html");  
    } 

我正在嘗試與兩個註釋行的東西,但只是崩潰的應用程序。這是JavaScript:

var x, y; 
    function init(){ 
     // ... here I need the values of X and Y 

    } 
    function setX(ex) { 
     x = ex; 
    } 
    function setY(ey) { 
     y = ey 
    } 
+0

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

+0

在頁面加載後(在'onPageCompleted()')之後,你可以爲你的js *運行'loadUrl'。不用實現'setX'和'setY',只需提供一個'setXY' - 少一個電話。 – 323go

+0

@ 323go但是如果我想在我正在加載的頁面上顯示它們,我不需要以前的值嗎?有沒有其他的方法? – user1418018

回答

2

您需要在webview中實現javascript界面​​,就像這樣;

WebView webView = (WebView) findViewById(R.id.webView); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebChromeClient(new WebChromeClient()); 

    Bundle extras = getIntent().getExtras(); 
    double x = 0, y = 0; 
    if (extras != null) { 
     x = extras.getDouble("x"); 
     y = extras.getDouble("y"); 
    } 
    webView.addJavascriptInterface(new JavaScriptInterface(x, y), "JSInterface"); 
    webView.loadUrl("file:///android_asset/index.html"); 

您的活動

public class JavaScriptInterface { 

     double x, y; 

     JavaScriptInterface(double x, double y) { 
      this.x = x; 
      this.y = y; 
     } 

     public double getXValue() { 
      return x; 
     } 

     public double getYValue() { 
      return y; 

     } 
    } 

創建此Javainteface在你的index.html

var x, y; 
    function init(){ 
     x = JSInterface.getXValue(); 
     y = JSInterface.getYValue(); 
    } 
+0

捆綁額外永遠是空!該怎麼辦 ? –

+1

@ Suda.nese給出的答案是關於被問的問題。這是如何與JavaScript交流的例子。你需要從bundle extras中的前一個活動傳遞到這裏閱讀。 –

+0

感謝您的回覆。事實上,我沒有傳遞任何額外的東西,捆綁包也是空的。現在你回答我的作品。再次感謝您的解決方案。 –