Могу ли я создать "оконный" объект для JavaScript, работающего в Java6 Rhino Script Engine

  • Я хочу запустить Javascript на моем сервере Java6 - то есть, используя javax.script API, в частности Rhino Script Engine. (Хотя другое решение будет приемлемым)
  • Файл сценария создается и поддерживается третьей стороной, поэтому я не хочу загружать и редактировать его на случай, если он со временем изменится.
  • Скрипт напрямую ссылается на объект "окна" (и, возможно, на объект "документа" и т. Д.), Который Rhino, похоже, не поддерживает.

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

2 ответа

var window = {}
var document = {}

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

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

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

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

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

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

Другие вопросы по тегам