爱生活

 找回密码
 立即注册
搜索
查看: 103|回复: 0
打印 上一主题 下一主题

Java调用JS脚本里的方法,java怎么调用js

[复制链接]

14万

主题

14万

帖子

-134万

积分

限制会员

跳转到指定楼层
楼主
发表于 2023-4-3 10:33:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

Java调用JS脚本里的方法


    本例子使用了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;    &

如何通过java代码调用js


JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。
在Java中直接调用js代码
不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert” is not defined。
package com.sinaapp.manjushri;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;   /**  * 直接调用js代码  */
public class ScriptEngineTest {   
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
try{   

engine.eval("var a=3; var b=4;print (a+b);");

// engine.eval("alert(\"js alert\");");    // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不存在的异常
}catch(ScriptException e){

e.printStackTrace();
}
}   
}


java调用 js


这里你需要搞清楚程序运行环境(context)的区别。对于class A的main方法,其运行环境是装载class A的虚拟机(运行在操作系统上);对于function a()其运行环境是请求那个Jsp页面的浏览器,所以从main方法中调用a()的说法无从谈起。

你能把你的直接需求(你为什么希望从main()中调用a())说明一下吗?这样能够更好地帮助你解决问题


如何用java执行指定页面中的js代码


要在java中执行js代码,首先明白,java不支持浏览器本身的方法。支持自定义的js方法,否则会报错

先新建一个js文件:jsss.js
内容如下:

function aa(a,b){    return a+b;
}




然后在java中写代码:


public class ZipTest {
public static void main(String[] args) throws Exception {

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
String jsFileName="G:\\javaPro\\zmwmcc\\WebRoot\\jsss.js";
FileReader reader = new FileReader(jsFileName);   // 执行指定脚本             engine.eval(reader);
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine;    // 调用merge方法,并传入两个参数
Double c = (Double)invoke.invokeFunction("aa", 2, 3); //调用了js的aa方法
System.out.println(c);
}
// engine.eval("alert(\"js alert\");");    // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不    }
}






上一篇:小腿瘙痒的原因是什么,两边小腿很痒怎么什么原因
下一篇:乌镇西栅、东栅的“栅“字读什么?,西栅东栅怎么读
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|手机版|小黑屋|爱生活 ( 蜀ICP备20006951号 )|

 

快速回复 返回顶部 返回列表