Могу ли я создать «оконный» объект для JavaScript, работающего в Java6 Rhino Script Engine - PullRequest
6 голосов
/ 08 июня 2009
  • Я хочу запустить Javascript на моем сервере Java6, т. Е. С помощью API javax.script, в частности Rhino Script Engine. (Хотя было бы приемлемо другое решение)
  • Файл сценария создается и поддерживается третьей стороной, поэтому я не хочу загружать и редактировать его в случае его изменения со временем.
  • Скрипт напрямую ссылается на объект 'окна' (и, возможно, на объект 'документа' и т. Д.), Который Rhino не , кажется, поддерживает.

Могу ли я это сделать, и если да, то как?

Ответы [ 2 ]

6 голосов
/ 08 июня 2009

Объекты окна и документа просто предоставляются веб-браузерами и не являются частью стандарта ECMAScript , который реализует Rhino. Они предназначены для доступа скрипта к текущему окну браузера и HTML-документу. Объект документа на самом деле является реализацией W3C DOM .

Rhino является чистой реализацией ECMAScript / JavaScript 1.7 и поэтому не знает ничего о HTML-страницах, окнах и браузере в целом. Это язык сценариев общего назначения, который в основном встроен в веб-браузер, и поэтому вы обычно можете использовать глобальные объекты, предоставляемые браузером.

Конечно, вы можете определить некоторые глобально доступные объекты с именами «окно» и «документ», которые являются просто заглушками, которые ничего не делают, но сценарий, который вы хотите выполнить, вероятно, использует некоторые методы и / или свойства для них, поэтому тебе не сильно поможет. Если вы хотите выполнить сценарий, который был написан для выполнения в среде браузера, вам необходимо предоставить полную среду, подобную браузеру.

Если это возможно и имеет смысл в контексте сервера, это другой вопрос ...

6 голосов
/ 08 июня 2009
var window = {}
var document = {}

... конечно, они не принесут много пользы, если вы не заполните их свойствами, к которым скрипт пытается получить доступ.

Вы не можете просто заполнить их стандартными API браузера - большинство из них не имеют смысла вне контекста браузера.

...