【问题标题】:How to call javascript function from java code如何从java代码调用javascript函数
【发布时间】:2012-07-29 04:09:41
【问题描述】:

我正在尝试从 java 类调用 javascript 函数,但出现以下错误:

-Could not find method sun.misc.Service.installedProviders, referenced from method javax.script.ScriptEngineManager.initEngines

-Could not find method sun.misc.Service.providers, referenced from method javax.script.ScriptEngineManager.initEngines

-Could not find method sun.misc.Service.installedProviders, referenced from method javax.script.ScriptEngineManager.initEngines

-java.lang.VerifyError: javax.script.ScriptEngineManager

代码如下:

    public  void sendResult(){
    ScriptEngineManager manager = new ScriptEngineManager();
                    ScriptEngine engine = manager.getEngineByName("js");

                    String script = "function send() {"+"var id_result = window.MyPGP.getResult();"+                            
                            "document.getElementById('id_result').value = id_result;"+"console.log(\"change the box value\");";

                    try {
                        engine.eval(script);

                        Invocable invocableEngine = (Invocable) engine;

                        invocableEngine.invokeFunction("send");


   } catch (ScriptException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }  catch (Exception e) {
                    e.printStackTrace();
                }

我真正想做的是,当支付完成时,在这个类的其他方法中调用这个函数来获取支付结果,并打印在主html的一个框中。

【问题讨论】:

  • 这和安卓有什么关系?
  • 是一个基于android的phonegap应用。
  • @AndersMetnik 实际上它与android有关。因为我们必须根据平台以不同的方式编写代码。
  • @luperxe 您想调用.html 文件中的java 脚本函数吗?你想在后台运行那个函数吗?
  • @Coder_sLaY 我要调用的javascript函数写在我发布的代码中。 String script = "function send() {"+"var id_result = window.MyPGP.getResult();"+"document.getElementById('id_result').value = id_result;"+"console.log(\"更改框值\");";是的,我想在后台运行它。

标签: java javascript android cordova


【解决方案1】:
 ScriptEngine engine = manager.getEngineByName("JavaScript");

这行得通吗?

【讨论】:

    【解决方案2】:

    你可以这样做

    super.loadUrl("file:///android_asset/www/index.html", 20000);
    super.loadUrl("javascript: { var pageFlag = '" + flag + "';}"); // Your Javascript function here
    

    【讨论】:

    • 但在这种情况下,javascript 代码将在应用程序启动时执行。我想要的是在 java 执行后调用 javascript 代码
    • 你在后台做什么?
    • 我的应用程序包含贝宝付款。我点击一个按钮进行支付,调用了一些javascript方法,然后执行java代码,我在一个变量中获得了支付结果。我想要的是将此变量传递给 html 代码,因此,我需要调用一个 javascript 函数来获取该值并将其打印在 html 上。我已经完成了,但我需要单击另一个按钮才能看到结果。我现在想要的是不用点击按钮就能看到结果。
    【解决方案3】:

    使用此代码

    import javax.script.*;
    
    public class InvokeScriptFunction {
        public static void main(String[] args) throws Exception {
            ScriptEngineManager manager = new ScriptEngineManager();
            ScriptEngine engine = manager.getEngineByName("JavaScript");
    
            // JavaScript code in a String
            String script = "function hello(name) { print('Hello, ' + name); }";
            // evaluate script
            engine.eval(script);
    
            // javax.script.Invocable is an optional interface.
            // Check whether your script engine implements or not!
            // Note that the JavaScript engine implements Invocable interface.
            Invocable inv = (Invocable) engine;
    
            // invoke the global function named "hello"
            inv.invokeFunction("hello", "Scripting!!" );
        }
    }
    

    祝你好运

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多