6
  • 我想在我的 Java6 服务器上运行一些 Javascript - 即使用 javax.script API,特别是 Rhino 脚本引擎。(虽然另一种解决方案是可以接受的)
  • 脚本文件是由第三方创建和支持的,所以我不想下载和编辑它,以防它随着时间的推移而改变。
  • 该脚本直接引用了 Rhino 似乎不支持的“窗口”对象(可能还有“文档”对象等

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

4

2 回答 2

6
var window = {}
var document = {}

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

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

于 2009-06-08T11:22:59.837 回答
6

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

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

您当然可以使用名称“window”和“document”定义一些全局可访问的对象,它们只是不做任何事情的存根,但是您要执行的脚本可能在它们上使用了一些方法和/或属性,所以这不会对你有很大帮助。如果您想执行一个脚本,该脚本是为在浏览器环境中执行而编写的,您需要提供一个完整的类似“浏览器”的环境。

如果这是可能的并且在服务器上下文中有意义是另一个问题......

于 2009-06-08T11:27:37.067 回答