【问题标题】:Not able to execute browser supported JS code in Java using Rhino无法使用 Rhino 在 Java 中执行浏览器支持的 JS 代码
【发布时间】:2014-02-05 21:16:38
【问题描述】:

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

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

字符串结果 = (String)invocableEngine.invokeFunction("Execute");

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

  1. Scriptengine 无法识别 js 文件中用作命令行的双斜杠 (//) 值,因此引擎无法调用 // 之后的代码
  2. 脚本引擎也无法识别浏览器参数,如 window 、 navigator 等,

有什么办法可以解决我的问题吗?

【问题讨论】:

    标签: java javascript


    【解决方案1】:

    windownavigatordocument 对象等不是 JavaScript 语言的一部分,而是 DOM 的一部分,它是 Web 浏览器的独立部分。 Rhino 引擎运行纯 JavaScript 语言,但不模拟 Web 浏览器。

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

    HtmlUnitSelenium 也可能对您有用,甚至Greasemonkey。 (如果您详细说明这段 JavaScript 代码的来源以及您以这种方式运行它的目标,或许可以给出更具体的答案。)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多