当前位置:首页 > Java

java 如何调用js

2026-02-04 18:54:23Java

调用 JavaScript 的常用方法

在 Java 中调用 JavaScript 代码可以通过多种方式实现,以下是几种常见的方法:

使用 ScriptEngine(Nashorn 引擎)

Java 内置了 Nashorn JavaScript 引擎(Java 8 及以下版本),可以通过 javax.script 包调用 JavaScript:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class JsCaller {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("nashorn");

        try {
            engine.eval("print('Hello from JavaScript')");
            engine.eval("function add(a, b) { return a + b; }");
            Object result = engine.eval("add(5, 3)");
            System.out.println("Result: " + result);
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

使用 GraalVM 的 JavaScript 引擎

从 Java 11 开始,Nashorn 被标记为废弃,推荐使用 GraalVM 的 JavaScript 引擎:

import org.graalvm.polyglot.Context;

public class GraalJsCaller {
    public static void main(String[] args) {
        try (Context context = Context.create("js")) {
            context.eval("js", "print('Hello from GraalVM JavaScript')");
            context.eval("js", "function multiply(a, b) { return a * b; }");
            Number result = context.eval("js", "multiply(4, 5)").asNumber();
            System.out.println("Result: " + result);
        }
    }
}

通过 Rhino 库调用

对于较老版本的 Java(如 Java 7),可以使用 Mozilla 的 Rhino 引擎:

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;

public class RhinoJsCaller {
    public static void main(String[] args) {
        Context context = Context.enter();
        try {
            Scriptable scope = context.initStandardObjects();
            Object result = context.evaluateString(
                scope, 
                "function sub(x, y) { return x - y; }; sub(10, 2);",
                "js", 1, null);
            System.out.println("Result: " + Context.toNumber(result));
        } finally {
            Context.exit();
        }
    }
}

与浏览器交互(Selenium)

如果需要调用网页中的 JavaScript,可以使用 Selenium WebDriver:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class SeleniumJsCaller {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com");

        JavascriptExecutor js = (JavascriptExecutor) driver;
        Object result = js.executeScript("return document.title");
        System.out.println("Page title: " + result);

        driver.quit();
    }
}

注意事项

  • Nashorn 引擎在 Java 15 后被完全移除,后续版本需使用 GraalVM
  • GraalVM 需要单独安装并配置依赖
  • 涉及跨语言调用时需注意数据类型转换
  • 执行外部脚本时需处理安全性和异常情况

性能优化建议

对于频繁调用的 JavaScript 函数,可以预编译脚本:

// Nashorn 示例
Compilable compilingEngine = (Compilable) engine;
CompiledScript script = compilingEngine.compile("function(x) { return x * x; }");
Object result = script.eval();

通过选择合适的方法和优化手段,可以在 Java 应用中高效地集成 JavaScript 功能。

java 如何调用js

标签: javajs
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取…