Java调用JS脚本里的方法

Java调用JS脚本里的方法,第1张

;   本例子使用了JDK 以上的javax script包 通过Invocable接口实现JAVA调用JS脚本里的方法 本例中调用分为内部执行脚本和外部执行脚本 外部执行脚本分为不带参数调用和带参数调用 主要采用invokeFunction方法调用         ObjectinvokeFunction(String name Object… args)        用于调用脚本中定义的顶层程序和函数         ObjectinvokeMethod(Object thiz String name Object… args)        对以前的脚本执行中已经编译的脚本对象(以 ScriptEngine 的状态保持)调用某一方法         package de javase;        import javax script Invocable;        import javax script ScriptEngineManager;        import javax script ScriptEngine;        import java io File;        import java io Reader;        import java io FileReader;        public class AjavaInvokingFunction {        public static void main(String[] args) {        // 获得一个JavaScript脚本引擎 也可以是ECMAScript脚本引擎        ScriptEngineManager manager = new ScriptEngineManager()         ScriptEngine engine = manager getEngineByName( JavaScript )         String titlescript = function sayTitle() {         +    println( 源码实例 使用javax script调用JS脚本里的方法 )         +    println( )         + } ;        try {   

    // 调用内部脚本执行         engine eval(titlescript)         // 转换为Invocable        Invocable invocableEngine = (Invocable) engine;        // 不带参数调用sayTitle方法        invocableEngine invokeFunction( sayTitle )         // 调用外部脚本执行         // 创建JS文件的File对象 并读入流        File functionscript = new File( ajava js )         Reader reader = new FileReader(functionscript)         // 开始执行ajava js里的程序        engine eval(reader)         // 不带参数调用sayHello方法        invocableEngine invokeFunction( sayHello )         // 带参数调用sayHello方法        invocableEngine invokeFunction( sayHello mark )         } catch (Exception e) {        e printStackTrace()         }        }        }        ajava js文件         function sayHello(){        sayHello(null)         }        function sayHello(name){        if(name==null){        println( 欢迎你!请注册Ajava会员 )         }else{        println(name+ 独立JAVA社区欢迎你 )         }        }        运行结果(控制台)         源码实例 使用javax script调用JS脚本里的方法 lishixinzhi/Article/program/Java/hx/201311/26436

有时候因为需要,我们想在Java中调用js方法,不再是像页面中一个事件触发,该如何做到呢?今天下午没事得时候小研究了下,现跟大家分享一下。不对之处,望大家指正,共同进步!

[java] view plain copy

/

加载脚本引擎,并在java中调用js方法

/

public void test2()

{

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = managergetEngineByName("JavaScript");

try {

String str="2&1";

Double d = (Double) engineeval(str);

Integer i=dintValue();

Systemoutprintln(i);

} catch (ScriptException ex) {

exprintStackTrace();

}

}

[java] view plain copy

/

在java中调用js,jdk16中有加载js引擎类,然后由它来调用js方法。

并通过JDK平台给script的方法中的形参赋值

/

public void test(String name)

{

ScriptEngineManager sem = new ScriptEngineManager();

/

semgetEngineByExtension(String extension)参数为js

semgetEngineByMimeType(String mimeType) 参数为application/javascript 或者text/javascript

semgetEngineByName(String shortName)参数为js或javascript或JavaScript

/

ScriptEngine se = semgetEngineByName("js");

try

{

String script = "function say(){ return 'hello,'"+name+"; }";

seeval(script);

Invocable inv2 = (Invocable) se;

String res=(String)inv2invokeFunction("say",name);

Systemoutprintln(res);

}

catch(Exception e)

{

eprintStackTrace();

}

}

[java] view plain copy

/

演示如何将java中对象作为js中全局变量,同时演示将file类赋给脚本语言,并获得其属性。

/

public void testScriptVariables()

{

ScriptEngineManager sem=new ScriptEngineManager();

ScriptEngine engine=semgetEngineByName("js");

File file=new File("c://1txt");

engineput("f", file);

try {

engineeval("println('path:'+fgetPath())");//无法使用alert方法

} catch (ScriptException e) {

eprintStackTrace();

}

}

[java] view plain copy

/

演示如何在java中如何通过线程来启动一个js方法

/

public void testScriptInterface() throws ScriptException

{

ScriptEngineManager sem=new ScriptEngineManager();

ScriptEngine engine=semgetEngineByName("js");

String script="var obj=new Object();objrun=function(){println('test thread')}";

engineeval(script);

Object obj=engineget("obj");//获取js中对象

Invocable inv=(Invocable)engine;

Runnable r=invgetInterface(obj,Runnableclass);

Thread t=new Thread(r);

tstart();

}

这样java就可以执行动态语言了,不过注意是jdk16版本的哦~

这样写不知道你能不能看懂,这个问题远标java就已经讲过这个题目了,希望能帮到你!

以上就是关于Java调用JS脚本里的方法全部的内容,包括:Java调用JS脚本里的方法、如何在java中调用js方法、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10634666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存