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

bar*_*red 6 javascript java javax.script

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

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

Que*_*tin 6

var window = {}
var document = {}
Run Code Online (Sandbox Code Playgroud)

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

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


Sim*_*ann 6

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

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

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

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