我可以为Java6 Rhino脚本引擎中运行的javascript创建一个“窗口”对象

  • 我想在我的Java6服务器上运行一些Javascript – 即使用javax.script API,特别是Rhino脚本引擎。 (虽然可以接受另一种解决方案)
  • 脚本文件由第三方创建和支持,因此我不想下载并编辑它以防它随时间发生变化。
  • 该脚本直接引用了Rhino似乎不支持的’window’对象(可能还有’document’对象等)。

我可以这样做,如果是这样,怎么样?

var window = {} var document = {} 

…当然,除非用脚本试图访问的属性填充它们,否则它们不会有很多好处。

您不能只使用标准浏览器API填充它们 – 大多数API在浏览器的上下文之外没有意义。

窗口和文档对象仅由Web浏览器提供,并不是Rhino实现的ECMAScript标准的一部分。 它们允许脚本访问当前浏览器窗口和HTML文档。 文档对象实际上是W3C DOM的实现。

Rhino是ECMAScript / JavaScript 1.7的纯实现,因此一般不了解HTML页面,窗口和浏览器。 它是一种通用脚本语言,恰好大部分嵌入到Web浏览器中,因此您通常可以使用浏览器提供的全局对象。

您当然可以使用名称“window”和“document”定义一些全局可访问的对象,这些对象只是不执行任何操作的存根,但是您要执行的脚本可能会对它们使用某些方法和/或属性,因此这不会帮助你。 如果要执行编写用于在浏览器环境中执行的脚本,则需要提供完全“类似浏览器”的环境。

如果可能并且在服务器环境中有意义则是另一个问题……