javascript - 如何从 Tampermonkey 脚本访问 Java 类?
问题描述
我有一个 Java 类,对于 MWE 来说
package myjava;
public class Foo {
public Foo() {}
public int bar() {
return 1;
}
public static void main(String[] args) {
System.out.println(new Foo().bar());
}
}
它的位置被添加到 CLASSPATH 变量中,因此例如编写
java myjava.Foo
在 Windows 命令行中有效。
现在我想从 Google Chrome 中的 Tampermonkey 脚本调用这个方法。我在各个地方看到的示例似乎不起作用:
var Foo = Java.type("myjava.Foo");
var foo = new Foo();
var bar = foo.bar();
(如Oracle 文档建议的那样)和
var foo = new Packages.myjava.Foo();
var bar = foo.bar();
(以及其他一些变体)都在第一行抛出错误,不是因为不知道特定的类,而是因为第一个标识符(Java
, Packages
,我什至尝试简单地使用new myjava.Foo()
)。
显然,我似乎不知道如何从脚本中引用 Java 类,但我也找不到有效的示例。正确的方法是什么?
编辑:因为它已经引起我的注意,我链接到的网站提供的代码甚至不应该对网络浏览器的 JavaScript 引擎有效。
解决方案
这在 tampermonkey 中不起作用,因为这些脚本是在浏览器的 javascript 引擎 (afaik) 上运行的。该Java.type
函数是Nashorn扩展,这意味着它仅在脚本在 Nashorn 上运行时可用。正如文档所述(这似乎是您找到该片段的地方):
本节介绍如何从Nashorn 引擎解释的脚本访问 Java。
Nashorn 是一个 javascript 引擎的 Oracle JDK 实现。它是用 Java 编写的,因此作为扩展,它提供了与 Java 互操作的能力。但是 Java 和 javascript 是不同的语言,所以没有理由其他 javascript 引擎必须提供相同的 Java 互操作功能(不是每个 JS 运行时都绑定到 JVM,就像 Nashorn 一样)。
推荐阅读
- android - Android意图在应用程序中打开特定的推特
- vue.js - 为什么 this.$router 在 App.vue 中未定义?
- php - 在 Woocommerce 打印发票和装箱单中显示订单自定义元数据
- excel - 如何在 Beyond Compare 中查看 Excel 工作簿的 xltrail 生成差异?
- javascript - 带有对象数组的待办事项列表应用程序的 handleRemove 函数
- angular - 将复选框直接绑定到 ngModel 的 id 列表
- powershell - Powershell按特定字符对字符串数组进行排序
- javascript - TypeIt.js:完成每个字符串后的空容器
- excel - 访问父级的 get 属性会给出“对象变量或带有块...”错误
- python - 我怎样才能修复这个毕达哥拉斯三胞胎程序?