无法使用Rhino在Java中执行浏览器支持的JS代码

时间:2014-01-31 06:48:02

标签: java javascript

我正在尝试使用ScriptEngine(Rhino)在Java中执行JS代码。

我在运行时获取4个不同js文件的js代码并将其存储在String变量中,并使用以下java代码调用js文件中的方法,

String result =(String)invocableEngine.invokeFunction(“Execute”);

我能够看到Execute方法正确调用,但面临两个问题

  1. Scriptengine无法识别js文件中用作命令行的双斜杠(//)值,因此引擎无法在//
  2. 之后调用代码
  3. 此外,scriptengine无法识别浏览器参数,如窗口,导航器等,
  4. 有没有解决我问题的方法?

1 个答案:

答案 0 :(得分:1)

windownavigatordocument个对象等不是JavaScript语言的一部分,而是DOM的一部分,Envjs是其中的一部分网络浏览器。 Rhino引擎运行纯JavaScript语言,但不模拟Web浏览器。

要按原样运行依赖于浏览器的JavaScript,您需要额外的代码来模拟所需的浏览器API。如果它只需要几个简单的函数,您可以轻松地自己编写它们(在JavaScript中)。如果它需要更完整的浏览器和DOM模拟,请参阅HtmlUnit,它正是这样做的,并且是为Rhino设计的。 (注意:我自己从未尝试过。)

SeleniumGreasemonkey也可能对您有用,甚至可能对{{3}}有用。 (如果您详细解释这个JavaScript代码的来源以及以这种方式运行它的目标,可能会给出一个更具体的答案。)

我不确定“用作命令行的双斜杠(//)值”是什么意思。双斜杠引入注释,而不是命令。 //和行尾之间的任何代码都不应该运行。