Могу ли я создать "оконный" объект для 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-страницах, окнах и браузере в целом. Это язык сценариев общего назначения, который в основном встроен в веб-браузер, и поэтому вы обычно можете использовать глобальные объекты, предоставляемые браузером.
Конечно, вы можете определить некоторые глобально доступные объекты с именами "окно" и "документ", которые являются просто заглушками, которые ничего не делают, но сценарий, который вы хотите выполнить, вероятно, использует некоторые методы и / или свойства для них, так что это не будет очень вам помочь Если вы хотите выполнить скрипт, который был написан для выполнения в среде браузера, вам необходимо предоставить полную среду, подобную браузеру.
Если это возможно и имеет смысл в контексте сервера, это другой вопрос...