如何从Tampermonkey脚本访问Java类?

时间:2018-04-25 20:07:51

标签: javascript java tampermonkey

我有一个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();

(由documentation at Oracle建议)和

var foo = new Packages.myjava.Foo();
var bar = foo.bar();

(以及其他一些变体)都在第一行抛出错误,不是因为特定的类不可知,而是第一个标识符(JavaPackages,我甚至尝试过使用new myjava.Foo())。

显然,我似乎不知道如何从脚本中引用Java类,但我也找不到一个有效的示例。这样做的正确方法是什么?

编辑:由于引起我的注意,我链接的网站提供的代码甚至不应该对网络浏览器的JavaScript引擎有效。

2 个答案:

答案 0 :(得分:1)

这不适用于tampermonkey,因为这些脚本是在浏览器的javascript引擎(afaik)上运行的。 Java.type函数是Nashorn扩展名,这意味着它仅在Nashorn上运行脚本时可用。正如文档中提到的那样(这似乎是您找到该片段的地方):

  

本节介绍如何从Nashorn引擎解释的脚本访问Java。

Nashorn是javascript引擎的Oracle JDK实现。它是用Java编写的,因此作为扩展,它提供了与Java互操作的能力。但是Java和javascript是单独的语言,所以没有其他javascript引擎拥有来提供相同的Java互操作功能(并不是每个JS运行时都绑定到JVM,就像Nashorn一样)。

答案 1 :(得分:0)

最后,我设法找到了解决方法,虽然这有点麻烦:

可以使用GM_xmlhttpRequestPOST请求中的参数发送到localhost上的PHP文件,其中本地Web服务器将它们作为命令行参数传递给相关的Java类。然后它通过echo返回结果,结果字符串可以从responseText字段读取并在浏览器脚本中解释。