【问题标题】:android: call javascript from java problemandroid:从java问题调用javascript
【发布时间】:2011-07-29 08:25:58
【问题描述】:

我想知道是否有办法在android 上从java 调用javascript? 在我的程序中,我将 java 和 javascript 交互在一起。我正在使用 java 从 TCP 服务器接收响应(json 数据)并将它们保存到文件中。在 webview 中,我使用 javascript jQuery getJSON() 函数来检索该文件并使用 jQuery 绘图图表库来绘制图表。现在,java和javascript之间没有关系。每次更新数据和文件的时候,还是需要在webview中点击一个按钮来触发draw功能。我希望这些程序既聪明又方便。这是一种从 java.lang. 调用或执行 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 错误。这是引发我主要问题的问题吗?如果是这样,我该如何解决? 谢谢你的耐心。 干杯!

【问题讨论】:

    标签: java javascript android


    【解决方案1】:

    比如你在index.html中有一个javascript方法叫做loadData(),它读取你保存在java中的文件,那么你可以做的是wv.loadUrl("javascript:loadData()");。这实际上调用了javascript 方法,然后您可以在该方法中读取文件。希望这能解决您的问题。

    或者简单来说。只需这样做webView.loadUrl("javascript:jsmethodname()"); 从 java 执行 javascript。

    【讨论】:

    • 我不太明白该怎么做。你能给我举个例子吗?
    • 您说您正在下载 json 并使用 java 将其保存到文件中。因此,当 json 下载/保存到文件完成时,您可以这样做wv.loadUrl("javascript:getJSON()"); 是有道理的。这非常简单。
    • @Varun 嗨,我尝试了你的建议,但还是不行......你能帮我解决我的问题吗?这是问题stackoverflow.com/questions/42633793/…
    【解决方案2】:

    您可以尝试将 java 与 javascript 通信,将 java 对象注册到正在执行 javascript 的 webview。

    来自 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

    特别查看部分:Binding JavaScript code to Android code

    干杯, 弗朗西斯科

    【讨论】:

    • 你的问题搞错了。他想从java调用javascript,而不是从javascript调用java。
    猜你喜欢
    • 2011-06-05
    • 2017-07-28
    • 2011-09-28
    • 2014-08-03
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多