2014-05-09 110 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

感谢您的回复。事实上,我没有传递任何额外的东西,捆绑包也是空的。现在你回答我的作品。再次感谢您的解决方案。 –